MethodFinder.st
author Claus Gittinger <cg@exept.de>
Tue, 13 Nov 2001 13:00:40 +0100
changeset 1106 50a16e11b73a
parent 1104 237db486634c
child 1107 08b382d1c128
permissions -rw-r--r--
more st/x messages
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
     1
"{ Package: 'stx:libbasic3' }"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
     2
40d9ddd1f510 initial checkin
james
parents:
diff changeset
     3
Object subclass:#MethodFinder
1106
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
     4
	instanceVariableNames:'data answers selector argMap thisData mapStage mapList
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
     5
		expressions cachedClass cachedArgNum cachedSelectorLists'
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
     6
	classVariableNames:'AddAndRemove Approved Blocks Dangerous'
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
     7
	poolDictionaries:''
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
     8
	category:'MethodFinder'
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
     9
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    10
1100
0502179eabd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
    11
!MethodFinder class methodsFor:'documentation'!
0502179eabd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
    12
0502179eabd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
    13
documentation
0502179eabd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
    14
"
0502179eabd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
    15
  [author:]
0502179eabd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
    16
    ported from Squeak and GUI enhanced by James Hayes james@exept.de
0502179eabd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
    17
"
0502179eabd1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
    18
! !
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    19
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    20
!MethodFinder class methodsFor:'accessing'!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    21
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    22
abortAllSignal
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    23
    "return the value of the static variable 'AbortAllSignal' (automatically generated)"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    24
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    25
    ^ AbortAllSignal
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    26
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    27
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    28
abortAllSignal:something
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    29
    "set the value of the static variable 'AbortAllSignal' (automatically generated)"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    30
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    31
    AbortAllSignal := something.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    32
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    33
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    34
addAndRemove
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    35
    "return the value of the static variable 'AddAndRemove' (automatically generated)"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    36
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    37
    ^ AddAndRemove
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    38
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    39
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    40
addAndRemove:something
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    41
    "set the value of the static variable 'AddAndRemove' (automatically generated)"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    42
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    43
    AddAndRemove := something.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    44
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    45
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    46
approved
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    47
    "return the value of the static variable 'Approved' (automatically generated)"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    48
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    49
    ^ Approved
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    50
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    51
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    52
approved:something
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    53
    "set the value of the static variable 'Approved' (automatically generated)"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    54
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    55
    Approved := something.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    56
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    57
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    58
blocks
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    59
    "return the value of the static variable 'Blocks' (automatically generated)"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    60
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    61
    ^ Blocks
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    62
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    63
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    64
blocks:something
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    65
    "set the value of the static variable 'Blocks' (automatically generated)"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    66
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    67
    Blocks := something.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    68
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    69
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    70
dangerous
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    71
    "return the value of the static variable 'Dangerous' (automatically generated)"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    72
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    73
    ^ Dangerous
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    74
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    75
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    76
dangerous:something
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    77
    "set the value of the static variable 'Dangerous' (automatically generated)"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    78
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    79
    Dangerous := something.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    80
! !
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    81
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    82
!MethodFinder class methodsFor:'as yet unclassified'!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    83
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    84
methodFor: dataAndAnswers
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
    85
        "Return a Squeak expression that computes these answers.  (This method is called by the comment in the bottom pane of a MethodFinder.  Do not delete this method.)"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    86
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
    87
        | resultOC selFinder resultString |
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    88
   
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
    89
        resultOC _ (self new) load: dataAndAnswers; findMessage.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
    90
        resultString _ String streamContents: [:strm |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
    91
                resultOC do: [:exp | strm nextPut: $(; nextPutAll: exp; nextPut: $); space]].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
    92
        Smalltalk isMorphic ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
    93
                selFinder _ (Display bestGuessOfCurrentWorld 
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
    94
                                submorphThat: [:mm | mm class == SystemWindow and: 
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
    95
                                                                        [mm model isKindOf: SelectorBrowser]] 
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
    96
                                ifNone: [^ resultString]) model.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
    97
                selFinder searchResult: resultOC].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
    98
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
    99
        ^ resultString
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   100
! !
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   101
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   102
!MethodFinder methodsFor:'access'!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   103
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   104
answers
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   105
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   106
        ^ answers
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   107
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   108
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   109
data
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   110
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   111
        ^ data
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   112
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   113
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   114
expressions
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   115
        ^ expressions
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   116
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   117
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   118
selectors
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   119
        "Note the inst var does not have an S on the end"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   120
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   121
        ^ selector
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   122
! !
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   123
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   124
!MethodFinder methodsFor:'arg maps'!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   125
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   126
argMap
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   127
        ^ argMap 
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   128
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   129
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   130
makeAllMaps 
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   131
        "Make a giant list of all permutations of the args.  To find the function, we will try these permutations of the input data.  receiver, args."
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   132
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   133
        | ii |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   134
        mapList _ Array new: argMap size factorial.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   135
        ii _ 1.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   136
        argMap permutationsDo: [:perm |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   137
                mapList at: ii put: perm copy.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   138
                ii _ ii + 1].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   139
        mapStage _ 1.   "about to be bumped"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   140
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   141
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   142
mapData 
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   143
        "Force the data through the map (permutation) to create the data to test."
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   144
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   145
        thisData _ data collect: [:realData |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   146
                                        argMap collect: [:ind | realData at: ind]].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   147
                
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   148
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   149
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   150
permuteArgs 
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   151
        "Run through ALL the permutations.  First one was as presented."
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   152
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   153
        data first size <= 1 ifTrue: [^ false]. "no other way"
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   154
        mapList ifNil: [self makeAllMaps].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   155
        mapStage _ mapStage + 1.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   156
        mapStage > mapList size ifTrue: [^ false].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   157
        argMap _ mapList at: mapStage.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   158
        self mapData.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   159
        ^ true
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   160
        
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   161
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   162
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   163
thisData
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   164
        ^ thisData 
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   165
! !
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   166
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   167
!MethodFinder methodsFor:'find a constant'!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   168
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   169
allNumbers
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   170
        "Return true if all answers and all data are numbers."
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   171
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   172
        answers do: [:aa | aa isNumber ifFalse: [^ false]].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   173
        thisData do: [:vec |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   174
                        vec do: [:nn | nn isNumber ifFalse: [^ false]]].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   175
        ^ true
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   176
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   177
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   178
const
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   179
        | const |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   180
        "See if (^ constant) is the answer"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   181
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   182
        "quick test"
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   183
        ((const _ answers at: 1) closeTo: (answers at: 2)) ifFalse: [^ false].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   184
        3 to: answers size do: [:ii | (const closeTo: (answers at: ii)) ifFalse: [^ false]].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   185
        expressions add: '^ ', const printString.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   186
        selector add: #yourself.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   187
        ^ true
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   188
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   189
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   190
constDiv
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   191
        | const subTest got |
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   192
        "See if (data1 // C) is the answer"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   193
        self halt.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   194
        ^ false.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   195
        const _ ((thisData at: 1) at: 1) // (answers at: 1).  "May not be right!!"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   196
        got _ (subTest _ MethodFinder new copy: self addArg: const) 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   197
                                searchForOne isEmpty not.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   198
        got ifFalse: [^ false]. 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   199
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   200
        "replace data2 with const in expressions"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   201
        subTest expressions do: [:exp |
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   202
                expressions add: (exp copyReplaceAll: 'data2' with: const printString)].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   203
        selector addAll: subTest selectors.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   204
        ^ true
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   205
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   206
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   207
constLessThan
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   208
        | const subTest got minConst maxConst tt |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   209
        "See if (data1 <= C) or (data1 >= C) is the answer"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   210
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   211
        "quick test"
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   212
        ((answers at: 1) class superclass == Boolean) ifFalse: [^ false].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   213
        2 to: answers size do: [:ii | 
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   214
                ((answers at: ii) class superclass == Boolean) ifFalse: [^ false]].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   215
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   216
        minConst _ Float infinity.  maxConst _ minConst negated.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   217
        answers withIndexDo: [:aa :ii |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   218
                aa ifTrue: [tt _ (thisData at: ii) at: 1.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   219
                        minConst _ minConst min: tt.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   220
                        maxConst _ maxConst max: tt]].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   221
        const _ (thisData at: 1) at: 1.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   222
        got _ (subTest _ MethodFinder new copy: self addArg: minConst) 
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   223
                                searchForOne isEmpty not.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   224
        got ifFalse: ["try other extreme for <= >= "
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   225
                got _ (subTest _ MethodFinder new copy: self addArg: maxConst) 
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   226
                                searchForOne isEmpty not]. 
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   227
        got ifFalse: [^ false]. 
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   228
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   229
        "replace data2 with const in expressions"
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   230
        subTest expressions do: [:exp |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   231
                expressions add: (exp copyReplaceAll: 'data2' with: const printString)].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   232
        selector addAll: subTest selectors.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   233
        ^ true
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   234
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   235
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   236
constLinear
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   237
        | const subTest got denom num slope offset |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   238
        "See if (data1 * C1) + C2 is the answer.  In the form  #(C2 C1) polynomialEval: data1 "
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   239
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   240
        denom _ ((thisData at: 2) at: 1) - ((thisData at: 1) at: 1).
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   241
        denom = 0 ifTrue: [^ false].   "will divide by it"
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   242
        num _ (answers at: 2) - (answers at: 1).
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   243
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   244
    slope := (num asFloat / denom) reduce.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   245
    offset := ((answers at: 2) - (((thisData at: 2) at: 1) * slope)) reduce.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   246
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   247
        const _ Array with: offset with: slope.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   248
        got _ (subTest _ MethodFinder new copy: self addArg: const) 
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   249
                                searchForOne isEmpty not.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   250
        got ifFalse: [^ false]. 
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   251
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   252
        "replace data2 with const in expressions"
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   253
        subTest expressions do: [:exp |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   254
                expressions add: (exp copyReplaceAll: 'data2' with: const printString)].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   255
        selector addAll: subTest selectors.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   256
        ^ true
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   257
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   258
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   259
constMod
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   260
        | subTest low |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   261
        "See if mod, (data1 \\ C) is the answer"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   262
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   263
        low _ answers max.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   264
        low+1 to: low+20 do: [:const |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   265
                subTest _ MethodFinder new copy: self addArg: const.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   266
                (subTest testPerfect: #\\) ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   267
                        expressions add: 'data1 \\ ', const printString.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   268
                        selector add: #\\.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   269
                        ^ true]].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   270
        ^ false
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   271
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   272
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   273
constMult
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   274
        | const subTest got |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   275
        "See if (data1 * C) is the answer"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   276
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   277
        ((thisData at: 1) at: 1) = 0 ifTrue: [^ false].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   278
        const _ ((answers at: 1) asFloat / ((thisData at: 1) at: 1)) reduce.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   279
        got _ (subTest _ MethodFinder new copy: self addArg: const) 
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   280
                                searchForOne isEmpty not.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   281
        got ifFalse: [^ false]. 
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   282
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   283
        "replace data2 with const in expressions"
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   284
        subTest expressions do: [:exp |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   285
                expressions add: (exp copyReplaceAll: 'data2' with: const printString)].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   286
        selector addAll: subTest selectors.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   287
        ^ true
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   288
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   289
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   290
constPlus
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   291
        | const subTest got |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   292
        "See if (data1 + C) is the answer"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   293
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   294
        const _ (answers at: 1) - ((thisData at: 1) at: 1).
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   295
        got _ (subTest _ MethodFinder new copy: self addArg: const) 
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   296
                                searchForOne isEmpty not.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   297
        got ifFalse: [^ false]. 
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   298
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   299
        "replace data2 with const in expressions"
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   300
        subTest expressions do: [:exp |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   301
                expressions add: (exp copyReplaceAll: 'data2' with: const printString)].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   302
        selector addAll: subTest selectors.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   303
        ^ true
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   304
! !
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   305
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   306
!MethodFinder methodsFor:'initialize'!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   307
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   308
cleanInputs: dataAndAnswerString
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   309
        "Find an remove common mistakes.  Complain when ill formed."
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   310
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   311
| fixed ddd rs places |
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   312
ddd _ dataAndAnswerString.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   313
fixed _ false.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   314
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   315
rs _ ReadStream on: ddd, ' '.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   316
places _ OrderedCollection new.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   317
[rs upToAll: '#true'.  rs atEnd] whileFalse: [places addFirst: rs position-4]. 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   318
places do: [:pos | ddd _ ddd copyReplaceFrom: pos to: pos with: ''.
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   319
        fixed _ true].  "remove #"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   320
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   321
rs _ ReadStream on: ddd.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   322
places _ OrderedCollection new.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   323
[rs upToAll: '#false'.  rs atEnd] whileFalse: [places addFirst: rs position-5]. 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   324
places do: [:pos | ddd _ ddd copyReplaceFrom: pos to: pos with: ''.
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   325
        fixed _ true].  "remove #"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   326
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   327
fixed ifTrue: [self inform: '#(true false) are Symbols, not Booleans.  
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   328
Next time use { true. false }.'].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   329
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   330
fixed _ false.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   331
rs _ ReadStream on: ddd.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   332
places _ OrderedCollection new.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   333
[rs upToAll: '#nil'.  rs atEnd] whileFalse: [places addFirst: rs position-3]. 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   334
places do: [:pos | ddd _ ddd copyReplaceFrom: pos to: pos with: ''.
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   335
        fixed _ true].  "remove #"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   336
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   337
fixed ifTrue: [self inform: '#nil is a Symbol, not the authentic UndefinedObject.  
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   338
Next time use nil instead of #nil'].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   339
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   340
^ ddd
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   341
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   342
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   343
initialize
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   344
        "The methods we are allowed to use.  (MethodFinder new initialize) "
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   345
        Approved _ Set new.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   346
        AddAndRemove _ Set new.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   347
        Blocks _ Set new.                       
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   348
        "These modify an argument: longPrintOn: printOn: storeOn: sentTo: storeOn:base: printOn:base: absPrintExactlyOn:base: absPrintOn:base: absPrintOn:base:digitCount: writeOn: writeScanOn: possibleVariablesFor:continuedFrom:"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   349
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   350
"Object"  
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   351
        #("in class, instance creation" categoryForUniclasses chooseUniqueClassName initialInstance isSystemDefined newFrom: officialClass readCarefullyFrom:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   352
"accessing" at: basicAt: basicSize bindWithTemp: in: size yourself 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   353
"testing" basicType ifNil: #'ifNil:ifNotNil:' ifNotNil: #'ifNotNil:ifNil:' isColor isFloat isFraction isInMemory isInteger isMorph isNil isNumber isPoint isPseudoContext isText isTransparent isWebBrowser knownName notNil pointsTo: wantsSteps 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   354
"comparing" = == closeTo: hash hashMappedBy: identityHash identityHashMappedBy: identityHashPrintString ~= ~~ 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   355
"copying" clone copy shallowCopy 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   356
"dependents access" canDiscardEdits dependents hasUnacceptedEdits 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   357
"updating" changed changed: okToChange update: windowIsClosing 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   358
"printing" fullPrintString isLiteral longPrintString printString storeString stringForReadout stringRepresentation 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   359
"class membership" class isKindOf: #'isKindOf:orOf:' isMemberOf: respondsTo: xxxClass 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   360
"error handling" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   361
"user interface" defaultBackgroundColor defaultLabelForInspector fullScreenSize initialExtent modelWakeUp mouseUpBalk: newTileMorphRepresentative windowActiveOnFirstClick windowReqNewLabel: 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   362
"system primitives"  instVarAt: instVarNamed: 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   363
"private" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   364
"associating" -> 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   365
"converting" as: asOrderedCollection asString 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   366
"casing" caseOf: #'caseOf:otherwise:' 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   367
"binding" bindingOf: 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   368
"macpal" contentsChanged #'ifKindOf:thenDo:' instanceVariableValues  
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   369
"flagging" flag: 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   370
"translation support" "objects from disk" "finalization" ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   371
        #(#'at:add:' #'at:modify:' #'at:put:' #'basicAt:put:' "NOT instVar:at:"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   372
"message handling" perform: #'perform:orSendTo:' #'perform:with:' #'perform:with:with:' #'perform:with:with:with:' #'perform:withArguments:' #'perform:withArguments:inSuperclass:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   373
) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   374
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   375
"Boolean, True, False, UndefinedObject"  
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   376
        #("logical operations" & eqv: not xor: |
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   377
"controlling" and: ifFalse: #'ifFalse:ifTrue:' ifTrue: #'ifTrue:ifFalse:' or:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   378
"copying" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   379
"testing" isEmptyOrNil) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   380
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   381
"Behavior" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   382
        #("initialize-release"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   383
"accessing" compilerClass decompilerClass evaluatorClass format methodDict parserClass sourceCodeTemplate subclassDefinerClass
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   384
"testing" instSize instSpec isBits isBytes isFixed isPointers isVariable isWeak isWords
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   385
"copying"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   386
"printing" defaultNameStemForInstances printHierarchy
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   387
"creating class hierarchy"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   388
"creating method dictionary"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   389
"instance creation" basicNew basicNew: new new:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   390
"accessing class hierarchy" allSubclasses #'allSubclassesWithLevelDo:startingLevel:' allSuperclasses subclasses superclass withAllSubclasses withAllSuperclasses
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   391
"accessing method dictionary" allSelectors changeRecordsAt: compiledMethodAt: #'compiledMethodAt:ifAbsent:' firstCommentAt: lookupSelector: selectors selectorsDo: selectorsWithArgs: "slow but useful ->" sourceCodeAt: sourceCodeAt:ifAbsent: sourceMethodAt: sourceMethodAt:ifAbsent:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   392
"accessing instances and variables" allClassVarNames allInstVarNames allSharedPools classVarNames instVarNames instanceCount sharedPools someInstance subclassInstVarNames
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   393
"testing class hierarchy" inheritsFrom: kindOfSubclass
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   394
"testing method dictionary" canUnderstand: classThatUnderstands: hasMethods includesSelector: #'scopeHas:ifTrue:' whichClassIncludesSelector: whichSelectorsAccess: whichSelectorsReferTo: #'whichSelectorsReferTo:special:byte:' whichSelectorsStoreInto:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   395
"enumerating"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   396
"user interface"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   397
"private" indexIfCompact) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   398
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   399
"ClassDescription"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   400
        #("initialize-release" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   401
"accessing" classVersion isMeta name theNonMetaClass
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   402
"copying" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   403
"printing" classVariablesString instanceVariablesString sharedPoolsString
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   404
"instance variables" checkForInstVarsOK: 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   405
"method dictionary" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   406
"organization" category organization whichCategoryIncludesSelector:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   407
"compiling" acceptsLoggingOfCompilation wantsChangeSetLogging
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   408
"fileIn/Out" definition
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   409
"private" ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   410
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   411
"Class"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   412
        #("initialize-release" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   413
"accessing" classPool
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   414
"testing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   415
"copying" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   416
"class name" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   417
"instance variables" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   418
"class variables" classVarAt: classVariableAssociationAt:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   419
"pool variables" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   420
"compiling" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   421
"subclass creation" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   422
"fileIn/Out" ) do: [:sel | Approved add: sel]. 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   423
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   424
"Metaclass"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   425
        #("initialize-release" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   426
"accessing" isSystemDefined soleInstance
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   427
"copying" "instance creation" "instance variables"  "pool variables" "class hierarchy"  "compiling"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   428
"fileIn/Out"  nonTrivial ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   429
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   430
"Context, BlockContext"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   431
        #(receiver client method receiver tempAt: 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   432
"debugger access" mclass pc selector sender shortStack sourceCode tempNames tempsAndValues
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   433
"controlling"  "printing" "system simulation" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   434
"initialize-release" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   435
"accessing" hasMethodReturn home numArgs
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   436
"evaluating" value #'value:ifError:' #'value:value:' #'value:value:value:' #'value:value:value:value:' #'valueWithArguments:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   437
"controlling"  "scheduling"  "instruction decoding"  "printing" "private"  "system simulation" ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   438
        #(value: "<- Association has it as a store" ) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   439
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   440
"Message"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   441
        #("inclass, instance creation" selector: #'selector:argument:' #'selector:arguments:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   442
"accessing" argument argument: arguments sends:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   443
"printing" "sending" ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   444
        #("private" #'setSelector:arguments:') do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   445
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   446
"Magnitude"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   447
        #("comparing" < <= > >= #'between:and:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   448
"testing" max: min: min:max: ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   449
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   450
"Date, Time"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   451
        #("in class, instance creation" fromDays: fromSeconds: fromString: #'newDay:month:year:' #'newDay:year:' today
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   452
        "in class, general inquiries" dateAndTimeNow dayOfWeek: #'daysInMonth:forYear:' daysInYear: #'firstWeekdayOfMonth:year:' indexOfMonth: leapYear: nameOfDay: nameOfMonth:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   453
"accessing" day leap monthIndex monthName weekday year
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   454
"arithmetic" addDays: subtractDate: subtractDays:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   455
"comparing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   456
"inquiries" dayOfMonth daysInMonth daysInYear daysLeftInYear firstDayOfMonth previous:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   457
"converting" asSeconds
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   458
"printing" mmddyy mmddyyyy printFormat: printOn:format:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   459
"private" firstDayOfMonthIndex: weekdayIndex 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   460
        "in class, instance creation" fromSeconds: now 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   461
        "in class, general inquiries" dateAndTimeFromSeconds: dateAndTimeNow millisecondClockValue millisecondsToRun: totalSeconds
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   462
"accessing" hours minutes seconds
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   463
"arithmetic" addTime: subtractTime:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   464
"comparing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   465
"printing" intervalString print24 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   466
"converting") do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   467
        #("private" hours: #'hours:minutes:seconds:' #'day:year:' 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   468
                 ) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   469
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   470
"Number"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   471
        #("in class" #'readFrom:base:' 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   472
"arithmetic" * + - / // \\ abs negated quo: reciprocal rem:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   473
"mathematical functions" arcCos arcSin arcTan arcTan: cos exp floorLog: ln log log: raisedTo: raisedToInteger: sin sqrt squared tan
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   474
"truncation and round off" ceiling #'detentBy:atMultiplesOf:snap:' floor roundTo: roundUpTo: rounded truncateTo: truncated
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   475
"comparing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   476
"testing" even isDivisibleBy: isInf isInfinite isNaN isZero negative odd positive sign strictlyPositive
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   477
"converting" @ asInteger asNumber asPoint asSmallAngleDegrees degreesToRadians radiansToDegrees
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   478
"intervals" to: #'to:by:' 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   479
"printing" printStringBase: storeStringBase: ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   480
        Smalltalk isSmalltalkX ifTrue:[
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   481
            #("in class" #'readFrom:base:' 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   482
    "arithmetic"  
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   483
    "mathematical functions" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   484
    "truncation and round off" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   485
    "comparing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   486
    "testing" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   487
    "converting" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   488
    "intervals" downTo: #'downTo:by:' 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   489
    "printing" radixPrintStringRadix: printStringRadix: storeStringRadix: ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   490
        ].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   491
"Integer"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   492
        #("in class" primesUpTo:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   493
"testing" isPowerOfTwo
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   494
"arithmetic" alignedTo:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   495
"comparing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   496
"truncation and round off" atRandom normalize
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   497
"enumerating" timesRepeat:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   498
"mathematical functions" degreeCos degreeSin factorial gcd: lcm: take:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   499
"bit manipulation" << >> allMask: anyMask: bitAnd: bitClear: bitInvert bitInvert32 bitOr: bitShift: bitXor: lowBit noMask:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   500
"converting" asCharacter asColorOfDepth: asFloat asFraction asHexDigit
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   501
"printing" asStringWithCommas hex hex8 radix:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   502
"system primitives" lastDigit #'replaceFrom:to:with:startingAt:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   503
"private" "benchmarks" ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   504
1106
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   505
        Smalltalk isSmalltalkX ifTrue:[
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   506
            #(
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   507
    "printing"       hexPrintString
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   508
             ) do: [:sel | Approved add: sel].
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   509
        ].
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   510
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   511
"SmallInteger, LargeNegativeInteger, LargePositiveInteger"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   512
        #("arithmetic" "bit manipulation" highBit "testing" "comparing" "copying" "converting" "printing" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   513
"system primitives" digitAt: digitLength 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   514
"private" #'fromString:radix:' ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   515
        #((#'digitAt:put:') ) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   516
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   517
"Float"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   518
        #("arithmetic"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   519
"mathematical functions" reciprocalFloorLog: reciprocalLogBase2 timesTwoPower:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   520
"comparing" "testing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   521
"truncation and round off" exponent fractionPart integerPart significand significandAsInteger
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   522
"converting" asApproximateFraction asIEEE32BitWord asTrueFraction
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   523
"copying") do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   524
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   525
"Fraction, Random"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   526
        #(denominator numerator reduced next nextValue) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   527
        #(#'setNumerator:denominator:') do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   528
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   529
"Collection"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   530
        #("accessing" anyOne
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   531
"testing" includes: includesAllOf: includesAnyOf: includesSubstringAnywhere: isEmpty isSequenceable occurrencesOf:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   532
"enumerating" collect: #'collect:thenSelect:' count: detect: #'detect:ifNone:' detectMax: detectMin: detectSum: #'inject:into:' reject: select: #'select:thenCollect:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   533
"converting" asBag asCharacterSet asSet asSortedArray asSortedCollection asSortedCollection:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   534
"printing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   535
"private" maxSize
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   536
"arithmetic"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   537
"math functions" average max median min range sum) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   538
        #("adding" add: addAll: addIfNotPresent:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   539
"removing" remove: #'remove:ifAbsent:' removeAll: removeAllFoundIn: removeAllSuchThat: #'remove:ifAbsent:') do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   540
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   541
"SequenceableCollection"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   542
        #("comparing" hasEqualElements:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   543
"accessing" allButFirst allButLast at:ifAbsent: atAll: atPin: atRandom: atWrap: fifth first fourth identityIndexOf: #'identityIndexOf:ifAbsent:' indexOf: #'indexOf:ifAbsent:' #'indexOf:startingAt:ifAbsent:' #'indexOfSubCollection:startingAt:' #'indexOfSubCollection:startingAt:ifAbsent:' last second sixth third
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   544
"removing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   545
"copying" , copyAfterLast: #'copyAt:put:' #'copyFrom:to:' #'copyReplaceAll:with:' #'copyReplaceFrom:to:with:' copyUpTo: copyUpToLast: copyWith: copyWithout: copyWithoutAll: #'forceTo:paddingWith:' shuffled sortBy:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   546
"enumerating" collectWithIndex: findFirst: findLast: pairsCollect: #'with:collect:' withIndexCollect: polynomialEval:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   547
"converting" asArray asDictionary asFloatArray asIntegerArray asStringWithCr asWordArray reversed
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   548
"private" #'copyReplaceAll:with:asTokens:' ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   549
        #( swap:with:) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   550
1106
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   551
        Smalltalk isSmalltalkX ifTrue:[
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   552
            #(
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   553
    "copying"        copyWithoutLast: copyLast:  copyFrom: copyTo:
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   554
    "testing"        longestCommonPrefix
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   555
             ) do: [:sel | Approved add: sel].
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   556
        ].
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   557
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   558
"ArrayedCollection, Bag"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   559
        #("private" defaultElement 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   560
"sorting" isSorted
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   561
"accessing" cumulativeCounts sortedCounts sortedElements "testing" "adding" #'add:withOccurrences:' "removing" "enumerating" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   562
        ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   563
        #( #'mergeSortFrom:to:by:' sort sort: add: #'add:withOccurrences:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   564
"private" setDictionary ) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   565
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   566
"Other messages that modify the receiver"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   567
        #(#'atAll:put:' #'atAll:putAll:' atAllPut: #'atWrap:put:' #'replaceAll:with:' #'replaceFrom:to:with:'  removeFirst removeLast) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   568
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   569
        self initialize2.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   570
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   571
"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   572
MethodFinder new initialize.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   573
MethodFinder new organizationFiltered: Set
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   574
"
1106
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   575
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
   576
    "Modified: / 13.11.2001 / 12:39:22 / cg"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   577
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   578
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   579
initialize2
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   580
        "The methods we are allowed to use.  (MethodFinder new initialize) "
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   581
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   582
"Set"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   583
        #("in class" sizeFor:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   584
"testing" "adding" "removing" "enumerating"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   585
"private" array findElementOrNil: 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   586
"accessing" someElement) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   587
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   588
"Dictionary, IdentityDictionary, IdentitySet"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   589
        #("accessing" associationAt: #'associationAt:ifAbsent:' #'at:ifPresent:' keyAtIdentityValue: #'keyAtIdentityValue:ifAbsent:' keyAtValue: #'keyAtValue:ifAbsent:' keys
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   590
"testing" includesKey: ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   591
        #(removeKey: #'removeKey:ifAbsent:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   592
) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   593
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   594
"LinkedList, Interval, MappedCollection"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   595
        #("in class"  #'from:to:' #'from:to:by:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   596
"accessing" contents) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   597
        #(
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   598
"adding" addFirst: addLast:) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   599
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   600
"OrderedCollection, SortedCollection"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   601
        #("accessing" after: before:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   602
"copying" copyEmpty
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   603
"adding"  growSize
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   604
"removing" "enumerating" "private" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   605
"accessing" sortBlock) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   606
        #("adding" #'add:after:' #'add:afterIndex:' #'add:before:' addAllFirst: addAllLast: addFirst: addLast:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   607
"removing" removeAt: removeFirst removeLast
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   608
"accessing" sortBlock:) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   609
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   610
"Character"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   611
        #("in class, instance creation" allCharacters digitValue: new separators
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   612
        "accessing untypeable characters" backspace cr enter lf linefeed nbsp newPage space tab
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   613
        "constants" alphabet characterTable
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   614
"accessing" asciiValue digitValue
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   615
"comparing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   616
"testing" isAlphaNumeric isDigit isLetter isLowercase isSafeForHTTP isSeparator isSpecial isUppercase isVowel tokenish
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   617
"copying"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   618
"converting" asIRCLowercase asLowercase asUppercase
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   619
        ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   620
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   621
"String"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   622
        #("in class, instance creation" crlf fromPacked:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   623
        "primitives" #'findFirstInString:inSet:startingAt:' #'indexOfAscii:inString:startingAt:'      "internet" valueOfHtmlEntity:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   624
"accessing" byteAt: endsWithDigit #'findAnySubStr:startingAt:' findBetweenSubStrs: #'findDelimiters:startingAt:' #'findString:startingAt:' #'findString:startingAt:caseSensitive:' findTokens: #'findTokens:includes:' #'findTokens:keep:' includesSubString: #'includesSubstring:caseSensitive:' #'indexOf:startingAt:' indexOfAnyOf: #'indexOfAnyOf:ifAbsent:' #'indexOfAnyOf:startingAt:' #'indexOfAnyOf:startingAt:ifAbsent:' lineCorrespondingToIndex: lineCount lineNumber: #'skipAnySubStr:startingAt:' #'skipDelimiters:startingAt:' startsWithDigit
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   625
"comparing" alike: beginsWith: caseSensitiveLessOrEqual: charactersExactlyMatching: compare: crc16 endsWith: endsWithAnyOf: sameAs: #'startingAt:match:startingAt:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   626
"copying" #'copyReplaceTokens:with:' #'padded:to:with:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   627
"converting" asByteArray asDate asDisplayText asFileName asHtml asLegalSelector asPacked asParagraph asText asTime asUnHtml asUrl asUrlRelativeTo: #capitalized compressWithTable: contractTo: correctAgainst: encodeForHTTP initialIntegerOrNil keywords quoted sansPeriodSuffix splitInteger stemAndNumericSuffix substrings surroundedBySingleQuotes truncateWithElipsisTo: withBlanksTrimmed withFirstCharacterDownshifted withNoLineLongerThan: withSeparatorsCompacted withoutLeadingDigits withoutTrailingBlanks
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   628
"displaying" "printing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   629
"system primitives" #'compare:with:collated:' 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   630
"Celeste" withCRs
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   631
"internet" decodeMimeHeader decodeQuotedPrintable replaceHtmlCharRefs unescapePercents withInternetLineEndings withSqueakLineEndings withoutQuoting
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   632
"testing" isAllSeparators lastSpacePosition
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   633
"paragraph support" indentationIfBlank:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   634
"arithmetic" ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   635
        #(#'byteAt:put:' translateToLowercase match:) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   636
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   637
"Symbol"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   638
        #("in class, private" hasInterned:ifTrue:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   639
        "access" morePossibleSelectorsFor: possibleSelectorsFor: selectorsContaining: #'thatStarts:skipping:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   640
"accessing" "comparing" "copying" "converting" "printing" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   641
"testing" isInfix isKeyword isPvtSelector isUnary) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   642
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   643
"Array"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   644
        #("comparing" "converting" evalStrings 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   645
"printing" "private" hasLiteralSuchThat:) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   646
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   647
"Array2D"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   648
        #("access" #'at:at:' atCol: #'atCol:put:' atRow: extent #'extent:fromArray:' height width #'width:height:type:') do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   649
        #(#'at:at:add:' #'at:at:put:' #'atRow:put:' ) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   650
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   651
"ByteArray"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   652
        #("accessing" doubleWordAt: wordAt: 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   653
"platform independent access" #'longAt:bigEndian:' #'shortAt:bigEndian:' #'unsignedLongAt:bigEndian:' #'unsignedShortAt:bigEndian:' 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   654
"converting") do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   655
        #(#'doubleWordAt:put:' #'wordAt:put:' #'longAt:put:bigEndian:' #'shortAt:put:bigEndian:' #'unsignedLongAt:put:bigEndian:' #'unsignedShortAt:put:bigEndian:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   656
        ) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   657
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   658
"FloatArray"            "Dont know what happens when prims not here"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   659
        false ifTrue: [#("accessing" "arithmetic" *= += -= /=
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   660
"comparing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   661
"primitives-plugin" primAddArray: primAddScalar: primDivArray: primDivScalar: primMulArray: primMulScalar: primSubArray: primSubScalar:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   662
"primitives-translated" #'primAddArray:withArray:from:to:' #'primMulArray:withArray:from:to:' #'primSubArray:withArray:from:to:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   663
"converting" "private" "user interface") do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   664
        ].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   665
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   666
"IntegerArray, WordArray"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   667
"RunArray"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   668
        #("in class, instance creation" #'runs:values:' scanFrom:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   669
"accessing" runLengthAt: 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   670
"adding" "copying"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   671
"private" runs values) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   672
        #(coalesce #'addLast:times:' #'repeatLast:ifEmpty:' repeatLastIfEmpty:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   673
                ) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   674
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   675
"Stream  -- many operations change its state"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   676
        #("testing" atEnd) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   677
        #("accessing" next: nextMatchAll: nextMatchFor: upToEnd
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   678
#'next:put:' nextPut: nextPutAll: "printing" print: printHtml:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   679
        ) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   680
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   681
"PositionableStream"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   682
        #("accessing" contentsOfEntireFile originalContents peek peekFor: "testing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   683
"positioning" position ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   684
        #(nextDelimited: nextLine upTo: position: reset resetContents setToEnd skip: skipTo: upToAll: ) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   685
        "Because it is so difficult to test the result of an operation on a Stream (you have to supply another Stream in the same state), we don't support Streams beyond the basics.  We want to find the messages that convert Streams to other things."
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   686
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   687
"ReadWriteStream"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   688
        #("file status" closed) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   689
        #("accessing" next: on: ) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   690
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   691
"WriteStream"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   692
        #("in class, instance creation" on:from:to: with: with:from:to:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   693
                ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   694
        #("positioning" resetToStart
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   695
"character writing" crtab crtab:) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   696
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   697
"LookupKey, Association, Link"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   698
        #("accessing" key nextLink) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   699
        #(key: #'key:value:' nextLink:) do: [:sel | AddAndRemove add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   700
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   701
"Point"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   702
        #("in class, instance creation" #'r:degrees:' #'x:y:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   703
"accessing" x y "comparing" "arithmetic" "truncation and round off"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   704
"polar coordinates" degrees r theta
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   705
"point functions" bearingToPoint: crossProduct: dist: dotProduct: eightNeighbors #'flipBy:centerAt:' fourNeighbors grid: #'nearestPointAlongLineFrom:to:' #'nearestPointOnLineFrom:to:' normal normalized octantOf: #'onLineFrom:to:' #'onLineFrom:to:within:' quadrantOf: #'rotateBy:centerAt:' transposed unitVector
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   706
"converting" asFloatPoint asIntegerPoint corner: extent: rect:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   707
"transforming" adhereTo: #'rotateBy:about:' scaleBy: #'scaleFrom:to:' translateBy: "copying"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   708
"interpolating" #'interpolateTo:at:') do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   709
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   710
"Rectangle"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   711
        #("in class, instance creation" #'center:extent:' encompassing: #'left:right:top:bottom:' 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   712
        merging: #'origin:corner:' #'origin:extent:' 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   713
"accessing" area bottom bottomCenter bottomLeft bottomRight boundingBox center corner corners innerCorners left leftCenter origin right rightCenter top topCenter topLeft topRight
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   714
"comparing"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   715
"rectangle functions" #'adjustTo:along:' amountToTranslateWithin: areasOutside: #'bordersOn:along:' encompass: expandBy: extendBy: #'forPoint:closestSideDistLen:' insetBy: #'insetOriginBy:cornerBy:' intersect: merge: pointNearestTo: quickMerge: #'rectanglesAt:height:' sideNearestTo: translatedToBeWithin: withBottom: withHeight: withLeft: withRight: #'withSide:setTo:' withTop: withWidth:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   716
"testing" containsPoint: containsRect: hasPositiveExtent intersects: isTall isWide
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   717
"truncation and round off"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   718
"transforming" #'align:with:' centeredBeneath: newRectFrom: squishedWithin: "copying"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   719
        ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   720
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   721
"Color"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   722
        #("in class, instance creation" colorFrom: #'colorFromPixelValue:depth:' fromRgbTriplet: gray: #'h:s:v:' #'r:g:b:' #'r:g:b:alpha:' #'r:g:b:range:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   723
        "named colors" black blue brown cyan darkGray gray green lightBlue lightBrown lightCyan lightGray lightGreen lightMagenta lightOrange lightRed lightYellow magenta orange red transparent veryDarkGray veryLightGray veryVeryDarkGray veryVeryLightGray white yellow
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   724
        "other" colorNames indexedColors pixelScreenForDepth: quickHighLight:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   725
"access" alpha blue brightness green hue luminance red saturation
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   726
"equality"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   727
"queries" isBitmapFill isBlack isGray isSolidFill isTranslucent isTranslucentColor
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   728
"transformations" alpha: dansDarker darker lighter #'mixed:with:' muchLighter slightlyDarker slightlyLighter veryMuchLighter #'alphaMixed:with:'
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   729
"groups of shades" darkShades: lightShades: #'mix:shades:' wheel:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   730
"printing" shortPrintString
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   731
"other" colorForInsets rgbTriplet
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   732
"conversions" asB3DColor asColor balancedPatternForDepth: bitPatternForDepth: closestPixelValue1 closestPixelValue2 closestPixelValue4 closestPixelValue8 dominantColor halfTonePattern1 halfTonePattern2 indexInMap: pixelValueForDepth: #'pixelWordFor:filledWith:' pixelWordForDepth: scaledPixelValue32
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   733
"private" privateAlpha privateBlue privateGreen privateRGB privateRed "copying"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   734
        ) do: [:sel | Approved add: sel].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   735
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   736
"       For each selector that requires a block argument, add (selector argNum) 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   737
                to the set Blocks."
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   738
"ourClasses _ #(Object Boolean True False UndefinedObject Behavior ClassDescription Class Metaclass MethodContext BlockContext Message Magnitude Date Time Number Integer SmallInteger LargeNegativeInteger LargePositiveInteger Float Fraction Random Collection SequenceableCollection ArrayedCollection Bag Set Dictionary IdentityDictionary IdentitySet LinkedList Interval MappedCollection OrderedCollection SortedCollection Character String Symbol Array Array2D ByteArray FloatArray IntegerArray WordArray RunArray Stream PositionableStream ReadWriteStream WriteStream LookupKey Association Link Point Rectangle Color).
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   739
ourClasses do: [:clsName | cls _ Smalltalk at: clsName.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   740
        (cls selectors) do: [:aSel |
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   741
                ((Approved includes: aSel) or: [AddAndRemove includes: aSel]) ifTrue: [
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   742
                        (cls formalParametersAt: aSel) withIndexDo: [:tName :ind |
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   743
                                (tName endsWith: 'Block') ifTrue: [
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   744
                                        Blocks add: (Array with: aSel with: ind)]]]]].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   745
"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   746
#((timesRepeat: 1 ) (indexOf:ifAbsent: 2 ) (pairsCollect: 1 ) (#'mergeSortFrom:to:by:' 3 ) (#'ifNotNil:ifNil:' 1 ) (#'ifNotNil:ifNil:' 2 ) (ifNil: 1 ) (#'at:ifAbsent:' 2 ) (#'ifNil:ifNotNil:' 1 ) (#'ifNil:ifNotNil:' 2 ) (ifNotNil: 1 ) (#'at:modify:' 2 ) (#'identityIndexOf:ifAbsent:' 2 ) (sort: 1 ) (sortBlock: 1 ) (detectMax: 1 ) (repeatLastIfEmpty: 1 ) (#'allSubclassesWithLevelDo:startingLevel:' 1 ) (#'keyAtValue:ifAbsent:' 2 ) (in: 1 ) (ifTrue: 1 ) (or: 1 ) (select: 1 ) (inject:into: 2 ) (#'ifKindOf:thenDo:' 2 ) (#'forPoint:closestSideDistLen:' 2 ) (#'value:ifError:' 2 ) (selectorsDo: 1 ) (removeAllSuchThat: 1 ) (#'keyAtIdentityValue:ifAbsent:' 2 ) (detectMin: 1 ) (#'detect:ifNone:' 1 ) (#'ifTrue:ifFalse:' 1 ) (#'ifTrue:ifFalse:' 2 ) (#'detect:ifNone:' 2 ) (hasLiteralSuchThat: 1 ) (#'indexOfAnyOf:ifAbsent:' 2 ) (reject: 1 ) (newRectFrom: 1 ) (#'removeKey:ifAbsent:' 2 ) (#'at:ifPresent:' 2 ) (#'associationAt:ifAbsent:' 2 ) (withIndexCollect: 1 ) (#'repeatLast:ifEmpty:' 2 ) (findLast: 1 ) (#'indexOf:startingAt:ifAbsent:' 3 ) (#'remove:ifAbsent:' 2 ) (#'ifFalse:ifTrue:' 1 ) (#'ifFalse:ifTrue:' 2 ) (#'caseOf:otherwise:' 2 ) (count: 1 ) (collect: 1 ) (sortBy: 1 ) (and: 1 ) (asSortedCollection: 1 ) (#'with:collect:' 2 ) (#'sourceCodeAt:ifAbsent:' 2 ) (detect: 1 ) (#'scopeHas:ifTrue:' 2 ) (collectWithIndex: 1 ) (#'compiledMethodAt:ifAbsent:' 2 ) (bindWithTemp: 1 ) (detectSum: 1 ) (#'indexOfSubCollection:startingAt:ifAbsent:' 3 ) (findFirst: 1 ) (#'sourceMethodAt:ifAbsent:' 2 ) (#'collect:thenSelect:' 1 ) (#'collect:thenSelect:' 2 ) (#'select:thenCollect:' 1 ) (#'select:thenCollect:' 2 ) (ifFalse: 1 ) (#'indexOfAnyOf:startingAt:ifAbsent:' 3 ) (#'indentationIfBlank:' 1 ) ) do: [:anArray |
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   747
        Blocks add: anArray].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   748
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   749
self initialize3.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   750
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   751
"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   752
MethodFinder new initialize.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   753
MethodFinder new organizationFiltered: TranslucentColor class 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   754
"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   755
"Do not forget class messages for each of these classes"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   756
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   757
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   758
initialize3
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   759
        "more selectors to consider"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   760
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   761
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   762
load: dataWithAnswers
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   763
        "Find a function that takes the data and gives the answers.  Odd list entries are data for it, even ones are the answers.  nil input means data and answers were supplied already."
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   764
"  (MethodFinder new) load: #( (4 3) 7  (-10 5) -5  (-3 11) 8);
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   765
                findMessage  "
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   766
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   767
dataWithAnswers ifNotNil: [
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   768
        data _ Array new: dataWithAnswers size // 2.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   769
        1 to: data size do: [:ii | data at: ii put: (dataWithAnswers at: ii*2-1)].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   770
        answers _ Array new: data size.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   771
        1 to: answers size do: [:ii | answers at: ii put: (dataWithAnswers at: ii*2)]].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   772
data do: [:list | 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   773
        (list isKindOf: SequenceableCollection) ifFalse: [
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   774
                ^ self warn: 'first and third items are not Arrays'].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   775
        ].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   776
argMap _ (1 to: data first size) asArray.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   777
data do: [:list | list size = argMap size ifFalse: [
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   778
                self warn: 'data arrays must all be the same size']].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   779
argMap size > 4 ifTrue: [self warn: 'No more than a receiver and 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   780
three arguments allowed'].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   781
        "Really only test receiver and three args." 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   782
thisData _ data copy.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   783
mapStage _ mapList _ nil.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   784
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   785
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   786
noteDangerous
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   787
        "Remember the methods with really bad side effects."
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   788
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   789
        Dangerous _ Set new.
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   790
"Object accessing, testing, copying, dependent access, macpal, flagging"
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   791
        #(addInstanceVarNamed:withValue: haltIfNil copyAddedStateFrom: veryDeepCopy veryDeepCopyWith: veryDeepFixupWith: veryDeepInner: addDependent: evaluate:wheneverChangeIn: codeStrippedOut: playSoundNamed: isThisEverCalled isThisEverCalled: logEntry logExecution logExit)
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   792
                do: [:sel | Dangerous add: sel].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   793
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   794
"Object error handling"
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   795
        #(cannotInterpret: caseError confirm: confirm:orCancel: doesNotUnderstand: error: halt halt: notify: notify:at: primitiveFailed shouldNotImplement subclassResponsibility tryToDefineVariableAccess:)
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   796
                do: [:sel | Dangerous add: sel].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   797
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   798
"Object user interface"
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   799
        #(basicInspect beep inform: inspect inspectWithLabel: notYetImplemented inspectElement )
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   800
                do: [:sel | Dangerous add: sel].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   801
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   802
"Object system primitives"
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   803
        #(become: becomeForward: instVarAt:put: instVarNamed:put: nextInstance nextObject rootStubInImageSegment: someObject tryPrimitive:withArgs:)
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   804
                do: [:sel | Dangerous add: sel].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   805
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   806
"Object private"
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   807
        #(errorImproperStore errorNonIntegerIndex errorNotIndexable errorSubscriptBounds: mustBeBoolean primitiveError: species storeAt:inTempFrame:)
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   808
                do: [:sel | Dangerous add: sel].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   809
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   810
"Object, translation support"
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   811
        #(cCode: cCode:inSmalltalk: cCoerce:to: export: inline: returnTypeC: sharedCodeNamed:inCase: var:declareC:)
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   812
                do: [:sel | Dangerous add: sel].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   813
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   814
"Object, objects from disk, finalization.  And UndefinedObject"
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   815
        #(comeFullyUpOnReload: objectForDataStream: readDataFrom:size: rehash saveOnFile storeDataOn: actAsExecutor executor finalize retryWithGC:until:   suspend)
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   816
                do: [:sel | Dangerous add: sel].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   817
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   818
"No Restrictions:   Boolean, False, True, "
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   819
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   820
"Morph"
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   821
        #(fullCopy copyRecordingIn:)
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   822
                do: [:sel | Dangerous add: sel].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   823
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   824
"Behavior"
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   825
        #(obsolete confirmRemovalOf: copyOfMethodDictionary literalScannedAs:notifying: storeLiteral:on: addSubclass: removeSubclass: superclass: 
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   826
"creating method dictionary" addSelector:withMethod: compile: compile:notifying: compileAll compileAllFrom: compress decompile: defaultSelectorForMethod: methodDictionary: recompile:from: recompileChanges removeSelector: compressedSourceCodeAt: selectorAtMethod:setClass: allInstances allSubInstances inspectAllInstances inspectSubInstances thoroughWhichSelectorsReferTo:special:byte: "enumerating" allInstancesDo: allSubInstancesDo: allSubclassesDo: allSuperclassesDo: selectSubclasses: selectSuperclasses: subclassesDo: withAllSubclassesDo:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   827
"user interface" allCallsOn: browse browseAllAccessesTo: browseAllCallsOn: browseAllStoresInto: "too slow->" crossReference removeUninstantiatedSubclassesSilently "too slow->" unreferencedInstanceVariables
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   828
"private" becomeCompact becomeUncompact flushCache format:variable:words:pointers: format:variable:words:pointers:weak: printSubclassesOn:level: removeSelectorSimply:)
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   829
                do: [:sel | Dangerous add: sel].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   830
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   831
"Others "
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   832
        #("no tangible result" do: associationsDo:  
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   833
"private" adaptToCollection:andSend: adaptToNumber:andSend: adaptToPoint:andSend: adaptToString:andSend: instVarAt:put: asDigitsToPower:do: combinations:atATimeDo: doWithIndex: pairsDo: permutationsDo: reverseDo: reverseWith:do: with:do: withIndexDo: asDigitsAt:in:do: combinationsAt:in:after:do: errorOutOfBounds permutationsStartingAt:do: fromUser)
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   834
                do: [:sel | Dangerous add: sel].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   835
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   836
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   837
        #(    fileOutPrototype addSpareFields makeFileOutFile )
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   838
                do: [:sel | Dangerous add: sel].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   839
        #(recompile:from: recompileAllFrom: recompileChanges asPrototypeWithFields: asPrototype addInstanceVarNamed:withValue: addInstanceVariable addClassVarName: removeClassVarName: findOrAddClassVarName: tryToDefineVariableAccess: instanceVariableNames: )
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   840
                do: [:sel | Dangerous add: sel].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   841
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   842
 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   843
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   844
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   845
organizationFiltered: aClass
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   846
        "Return the organization of the class with all selectors defined in superclasses removed.  (except those in Object)"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   847
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   848
        | org str |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   849
        org _ aClass organization deepCopy.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   850
        Dangerous do: [:sel |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   851
                        org removeElement: sel].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   852
        Approved do: [:sel |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   853
                        org removeElement: sel].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   854
        AddAndRemove do: [:sel |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   855
                        org removeElement: sel].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   856
        str _ org printString copyWithout: $(.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   857
        str _ '(', (str copyWithout: $) ).
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   858
        str _ str replaceAll: $' with: $".
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   859
        ^ str
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   860
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   861
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   862
test2: anArray
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   863
        "look for bad association"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   864
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   865
        anArray do: [:sub |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   866
                sub class == Association ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   867
                        (#('true' '$a' '2' 'false') includes: sub value printString) ifFalse: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   868
                                self error: 'bad assn'].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   869
                        (#('3' '5.6' 'x' '''abcd''') includes: sub key printString) ifFalse: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   870
                                self error: 'bad assn'].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   871
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   872
        "                       sub value class == Association ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   873
                                        self error: 'bad assn'].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   874
                                (sub value isKindOf: Class) ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   875
                                        self error: 'class in assn'].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   876
                                sub value class == Symbol ifTrue: [sub value asciiValue = 204 '$Ì' ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   877
                                        self error: 'Write into char']].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   878
                                sub value == $Ì ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   879
                                        self error: 'Write into char']
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   880
        "].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   881
                sub class == Array ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   882
                        sub do: [:element | 
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   883
                                element class == String ifTrue: [element first asciiValue < 32 ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   884
                                                self error: 'store into string in data']].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   885
                                element class == Association ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   886
                                        element value class == Association ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   887
                                                self error: 'bad assn']]]].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   888
                sub class == Date ifTrue: [sub year isInteger ifFalse: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   889
                                self error: 'stored into input date!!!!']].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   890
                sub class == Dictionary ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   891
                                sub size > 0 ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   892
                                        self error: 'store into dictionary']].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   893
                sub class == OrderedCollection ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   894
                                sub size > 4 ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   895
                                        self error: 'store into OC']].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   896
                ].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   897
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   898
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   899
test3
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   900
        "find the modification of the caracter table"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   901
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   902
        (#x at: 1) asciiValue = 120 ifFalse: [self error: 'Character table mod'].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   903
! !
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   904
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   905
!MethodFinder methodsFor:'search'!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   906
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   907
exceptions
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   908
        "Handle some very slippery selectors.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   909
        asSymbol -- want to be able to produce it, but do not want to make every string submitted into a Symbol!!" 
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   910
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   911
        | aSel |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   912
        answers first class == Symbol ifFalse: [^ self].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   913
        thisData first first class == String ifFalse: [^ self].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   914
        aSel _ #asSymbol.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   915
        (self testPerfect: aSel) ifTrue: [
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   916
                selector add: aSel.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   917
                expressions add: (String streamContents: [:strm | 
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   918
                        strm nextPutAll: 'data', argMap first printString.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   919
                        aSel keywords doWithIndex: [:key :ind |
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   920
                                strm nextPutAll: ' ',key.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   921
                                (key last == $:) | (key first isLetter not)
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   922
                                        ifTrue: [strm nextPutAll: ' data', 
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   923
                                                (argMap at: ind+1) printString]]])].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   924
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   925
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   926
findMessage
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   927
        "Control the search."
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   928
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   929
        data do: [:alist |
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   930
                (alist isKindOf: SequenceableCollection) ifFalse: [
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   931
                        ^ OrderedCollection with: 'first and third items are not Arrays']].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   932
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   933
        Approved ifNil: [self initialize].      "Sets of allowed selectors"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   934
        expressions _ OrderedCollection new.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   935
        self search: true.      "multi"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   936
        expressions isEmpty ifTrue: [^ OrderedCollection with: 'no single method does that function'].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   937
        expressions class = String ifTrue: [^ OrderedCollection with: expressions].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   938
        ^ expressions
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   939
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   940
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   941
insertConstants
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   942
        "see if one of several known expressions will do it. C is the constant we discover here."
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   943
        "C  data1+C  data1*C  data1//C  (data1*C1 + C2) (data1 = C) (data1 ~= C) (data1 <= C) (data1 >= C) 
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   944
 (data1 mod C)"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   945
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   946
        thisData size >= 2 ifFalse: [^ self].   "need 2 examples"
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   947
        (thisData at: 1) size = 1 ifFalse: [^ self].    "only one arg, data1"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   948
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   949
        self const ifTrue: [^ self].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   950
        self constEquiv ifTrue: [^ self].       " ==  ~= "
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   951
        self constLessThan ifTrue: [^ self].    " <=  and  >= "
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   952
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   953
        self allNumbers ifFalse: [^ self].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   954
        self constMod ifTrue: [^ self].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   955
        self constPlus ifTrue: [^ self].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   956
        self constMult ifTrue: [^ self].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   957
        self constDiv ifTrue: [^ self].
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   958
        self constLinear ifTrue: [^ self].
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   959
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   960
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   961
search: multi
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   962
        "if Multi is true, collect all selectors that work."
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   963
        | old |
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   964
        selector:=OrderedCollection new.       "list of them"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   965
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   966
      "  old _ Preferences autoAccessors.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   967
        Preferences disableGently: #autoAccessors. "
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   968
        Smalltalk isSmalltalkX ifTrue:[old:=false].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   969
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   970
        self simpleSearch.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   971
        multi not & (selector isEmpty not) ifTrue:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   972
                ["old ifTrue: [Preferences enableGently: #autoAccessors]."
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   973
                ^ selector]. 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   974
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   975
        [self permuteArgs] whileTrue:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   976
                [self simpleSearch.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   977
               multi not & (selector isEmpty not) ifTrue:
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   978
                        ["old ifTrue: [Preferences enableGently: #autoAccessors]."
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   979
                        ^ selector]].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   980
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   981
        self insertConstants.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   982
      "  old ifTrue: [Preferences enableGently: #autoAccessors]. "
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   983
"/ (selector isEmpty not) ifTrue: [^ selector]].   " expression is the answer, not a selector"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   984
        ^ #()
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   985
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   986
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   987
searchForOne
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   988
        "Look for and return just one answer"
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   989
1104
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   990
        expressions _ OrderedCollection new.
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   991
        self search: false.     "non-multi"
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   992
        ^ expressions
237db486634c copyLast: added to list
penk
parents: 1103
diff changeset
   993
                        
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   994
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   995
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   996
simpleSearch
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   997
        "Run through first arg's class' selectors, looking for one that works."
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   998
40d9ddd1f510 initial checkin
james
parents:
diff changeset
   999
| class supers listOfLists |
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1000
self exceptions.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1001
class:=thisData first first class.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1002
"Cache the selectors for the receiver class"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1003
(class == cachedClass and: [cachedArgNum = ((argMap size) - 1)]) 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1004
        ifTrue: [listOfLists:=cachedSelectorLists]
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1005
        ifFalse: [supers:=class withAllSuperclasses.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1006
                listOfLists:=OrderedCollection new.
1092
b6e046dfe01e checkin from browser
james
parents: 1089
diff changeset
  1007
                supers do: [:cls |    
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1008
                        listOfLists add: (cls selectorsWithArgs: (argMap size) - 1)].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1009
                cachedClass:=class.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1010
                cachedArgNum:=(argMap size) - 1.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1011
                cachedSelectorLists:=listOfLists].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1012
"/ self halt.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1013
listOfLists do: [:selectorList |
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1014
        selectorList do: [:aSel |
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1015
                (selector includes: aSel) ifFalse: [
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1016
                        ((Approved includes: aSel) or: [AddAndRemove includes: aSel]) ifTrue: [
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1017
                                (self testPerfect: aSel) ifTrue: [
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1018
                                        selector add: aSel.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1019
                                        expressions add: (String streamContents: [:strm | 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1020
                                                strm nextPutAll: 'data', argMap first printString.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1021
                                                aSel keywords doWithIndex: [:key :ind |
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1022
                                                        strm nextPutAll: ' ',key.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1023
                                                        (key last == $:) | (key first isLetter not)
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1024
                                                                ifTrue: [strm nextPutAll: ' data', 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1025
                                                                        (argMap at: ind+1) printString]]])
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1026
                                        ]]]]].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1027
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1028
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1029
testPerfect: aSelector
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1030
        "Try this selector!! Return true if it answers every example perfectly.  Take the args in the order they are.  Do not permute them.  Survive errors.  later cache arg lists."
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1031
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1032
| sz argList val rec activeSel perform argIsBlock expectedAnswer|
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1033
        "Transcript cr; show: aSelector.                debug"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1034
perform:=aSelector beginsWith: 'perform:'.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1035
sz:=argMap size.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1036
1 to: thisData size do: [:ii | "each example set of args"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1037
        argList:=(thisData at: ii) copyFrom: 2 to: sz.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1038
        perform
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1039
                ifFalse: [activeSel:=aSelector]
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1040
                ifTrue: [activeSel:=argList first.     "what will be performed"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1041
                        ((Approved includes: activeSel) or: [AddAndRemove includes: activeSel])
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1042
                                ifFalse: [^ false].     "not approved"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1043
                        aSelector == #perform:withArguments: 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1044
                                ifTrue: [activeSel numArgs = (argList at: 2) basicSize "avoid error" 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1045
                                                        ifFalse: [^ false]]
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1046
                                ifFalse: [activeSel numArgs = (aSelector numArgs - 1) 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1047
                                                        ifFalse: [^ false]]].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1048
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1049
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1050
        1 to: sz do: [:num |   
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1051
                (Blocks includes: (Array with: activeSel with: num)) ifTrue: [
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1052
                        Smalltalk isSmalltalkX ifTrue:[
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1053
                            argIsBlock := (argList at: num) isBlock
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1054
                        ] ifFalse:[
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1055
                            argIsBlock := (argList at: num) class == BlockContext    
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1056
                        ].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1057
                        argIsBlock ifFalse: [^ false]]].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1058
     "   (activeSel = #capitalized) ifTrue:[self halt.].  "  "  used to test  "
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1059
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1060
        rec:=(AddAndRemove includes: activeSel) 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1061
                        ifTrue: [(thisData at: ii) first class == Symbol ifTrue: [^ false].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1062
                                                "vulnerable to modification"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1063
                                (thisData at: ii) first copyTwoLevel]   "protect from damage"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1064
                        ifFalse: [[(thisData at: ii) first]ifError:[self halt.]] .
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1065
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1066
        expectedAnswer := (answers at: ii).
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1067
        val:= [ rec copy perform: aSelector withArguments: argList] 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1068
                ifError: [:aSignal|  
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1069
Transcript showCR:aSignal description.
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1070
                                                        "self test3."
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1071
                                                        "self test2: (thisData at: ii)."
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1072
                                                        ^ false].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1073
        "self test3."
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1074
        "self test2: (thisData at: ii)."
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1075
        (expectedAnswer isKindOf: Number) 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1076
        ifFalse:[
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1077
                (expectedAnswer = val) ifFalse: [^ false]]
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1078
        ifTrue:[
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1079
                (expectedAnswer closeTo: val) ifFalse: [^ false]].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1080
        ].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1081
        ^ true
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1082
!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1083
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1084
verify
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1085
        "Test a bunch of examples"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1086
        "       MethodFinder new verify    "
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1087
Approved ifNil: [self initialize].      "Sets of allowed selectors"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1088
"/(MethodFinder new load: #( (0) 0  (30) 0.5  (45) 0.707106  (90) 1)
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1089
"/        ) searchForOne asArray = #('data1 degreeSin') ifFalse: [self error: 'should have found it'].  "Squeak test"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1090
"/(MethodFinder new load:   { { true. [3]. [4]}. 3.  { false. [0]. [6]}. 6}
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1091
"/        ) searchForOne asArray = #('data1 ifTrue: data2 ifFalse: data3') ifFalse: [
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1092
"/                self error: 'should have found it'].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1093
(MethodFinder2 new load: #(#(1) true #(2) false #(5) true #(10) false)
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1094
        ) searchForOne asArray = #('data1 odd') ifFalse: [self error: 'should have found it'].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1095
                "will correct the date type of #true, and complain"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1096
Smalltalk isSmalltalkX ifTrue:[        
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1097
(MethodFinder2 new load: #((4 2) '2r100'   (255 16) '16rFF'    (14 8) '8r16')
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1098
        ) searchForOne asArray = 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1099
                #('data1 radixPrintStringRadix: data2' )
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1100
                          ifFalse: [self error: 'should have found it'].        
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1101
] ifFalse:[
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1102
(MethodFinder2 new load: #((4 2) '2r100'   (255 16) '16rFF'    (14 8) '8r16')
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1103
        ) searchForOne asArray = 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1104
                #('data1 radix: data2' 'data1 printStringBase: data2' 'data1 storeStringBase: data2')                             
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1105
                          ifFalse: [self error: 'should have found it'].        
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1106
].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1107
"/(MethodFinder2 new load: #(#(3@4) 4 #(1@5) 5)
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1108
"/        ) searchForOne asArray = #('data1 y') ifFalse: [self error: 'should have found it'].    
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1109
Smalltalk isSmalltalkX ifTrue:[
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1110
(MethodFinder2 new load: #(('abcd') $a  ('TedK') $T)
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1111
        ) searchForOne asArray = #('data1 first' 'data1 removeFirst'  'data1 anyOne')   
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1112
                 ifFalse: [self error: 'should have found it']. 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1113
] ifFalse:[
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1114
(MethodFinder2 new load: #(('abcd') $a  ('TedK') $T)
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1115
        ) searchForOne asArray = #('data1 asCharacter' 'data1 first' 'data1 anyOne')
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1116
                 ifFalse: [self error: 'should have found it']. 
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1117
].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1118
(((MethodFinder2 new load: #(('abcd' 1) $a  ('Ted ' 3) $d )
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1119
        ) searchForOne asArray) includesAll: #('data1 at: data2' 'data1 atPin: data2' 'data1 atWrap: data2'))
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1120
                ifFalse: [self error: 'should have found it'].  
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1121
(MethodFinder2 new load: #(((12 4 8)) 24  ((1 3 6)) 10 )
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1122
        ) searchForOne asArray=  #('data1 sum') ifFalse: [self error: 'should have found it'].  
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1123
                "note extra () needed for an Array object as an argument"
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1124
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1125
(MethodFinder2 new load: #((14 3) 11  (-10 5) -15  (4 -3) 7)
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1126
        ) searchForOne asArray = #('data1 - data2') ifFalse: [self error: 'should have found it'].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1127
((MethodFinder2 new load: #((4) 4  (-10) 10 (-3) 3 (2) 2 (-6) 6 (612) 612)
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1128
        ) searchForOne asArray includesAll: #('data1 abs')) ifFalse: [self error: 'should have found it'].
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1129
(MethodFinder2 new load: #(#(4 3) true #(-7 3) false #(5 1) true #(5 5) false)
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1130
        ) searchForOne asArray = #('data1 > data2') ifFalse: [self error: 'should have found it'].      
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1131
(MethodFinder2 new load: #((5) 0.2   (2) 0.5)
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1132
        ) searchForOne asArray = #('data1 reciprocal') ifFalse: [self error: 'should have found it'].   
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1133
(MethodFinder2 new load: #((12 4 8) 2  (1 3 6) 2  (5 2 16) 8)
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1134
        ) searchForOne asArray = #()     " '(data3 / data2) ' want to be able to leave out args"  
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1135
                ifFalse: [self error: 'should have found it'].  
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1136
(MethodFinder2 new load: #((0.0) 0.0  (1.5) 0.997495  (0.75) 0.681639)
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1137
        ) searchForOne asArray = #('data1 sin') ifFalse: [self error: 'should have found it'].  
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1138
(MethodFinder2 new load: #((7 5) 2   (4 5) 4   (-9 4) 3)
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1139
        ) searchForOne asArray = #('data1 \\ data2') ifFalse: [self error: 'should have found it'].     
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1140
! !
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1141
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1142
!MethodFinder class methodsFor:'documentation'!
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1143
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1144
version
1106
50a16e11b73a more st/x messages
Claus Gittinger <cg@exept.de>
parents: 1104
diff changeset
  1145
    ^ '$Header: /cvs/stx/stx/libbasic3/MethodFinder.st,v 1.6 2001-11-13 12:00:40 cg Exp $'
1089
40d9ddd1f510 initial checkin
james
parents:
diff changeset
  1146
! !