HelpBrowser: path box becomes a more conventional search box
[supercollider.git] / SCClassLibrary / Common / Core / Symbol.sc
blobb0660c114ea135112fc68506c5d5da99e3e560d2
1 Symbol {
2         *new { ^this.shouldNotImplement(thisMethod) }
4         // conversion
5         asSymbol { ^this }
6         asInteger {
7                 _Symbol_AsInteger
8                 ^this.primitiveFailed
9         }
10         asFloat {
11                 _Symbol_AsFloat
12                 ^this.primitiveFailed
13         }
14         ascii { ^this.asString.ascii }
16         // the primitive fails to escape '
17         asCompileString { ^("'" ++ super.asString.escapeChar($') ++ "'") }
18         asClass {
19                 _SymbolClass
20                 // if Symbol represents a class name then return the class, else return nil.
21         }
22         asSetter {
23                 _SymbolAsSetter
24                 ^this.primitiveFailed
25         }
26         asGetter {
27                 _SymbolAsGetter
28                 ^this.primitiveFailed
29         }
30         asSpec { ^Spec.specs.at(this) }
31         asWarp { arg spec; ^Warp.warps.at(this).new(spec) }
32         asTuning { ^TuningInfo.at(this) }
33         asScale { ^ScaleInfo.at(this) }
34         // testing
35         isSetter {
36                 // returns true if last character of symbol is an underscore
37                 _SymbolIsSetter
38                 ^this.primitiveFailed
39         }
40         isClassName {
41                 _SymbolIsClassName
42                 // returns true if first character of symbol is a capital letter
43         }
44         isMetaClassName {
45                 _SymbolIsMetaClassName
46                 // returns true if there is a meta class by this name
47         }
48         isPrefix { | other |
49                 _SymbolIsPrefix
50         }
51         isPrimitiveName {
52                 // returns true if symbol is a valid primitive name
53                 ^this.isPrefix(\_)
54         }
55         isPrimitive {
56                 // returns true if symbol names a bound primitive
57                 ^this.isPrimitiveName and: { this.primitiveIndex > 0 }
58         }
60         openTextFile { arg selectionStart=0, selectionLength=0;
61                 ^this.asString.openTextFile(selectionStart, selectionLength)
62         }
64         // Environment support
65         // The compiler translates use of an Environment variable like ~myvar
66         // to a call to one of these methods, for example:
67         //                      ~myvar = 5;  translates to:  'myvar'.envirPut(5);
68         // the implementations have been replaced by primitives
69         envirGet {
70                 _Symbol_envirGet
71                 ^currentEnvironment.at(this)
72         }
73         envirPut { arg aValue;
74                 _Symbol_envirPut
75                 currentEnvironment.put(this, aValue);
76                 ^aValue
77         }
79         blend { // Envelopes may call this on the curves inst var.
80                 ^this
81         }
83         ++ { arg aString; ^this.asString ++ aString }
85         asBinOpString {
86                 var res;
87                 res = this.asString;
88                 ^if(res[0].isAlphaNum) { res ++ ":" } { res }
89         }
91         applyTo { arg firstArg ... args;
92                 ^firstArg.performList(this, args)
93         }
95         // support for math on symbols
97         performBinaryOpOnSomething { ^this }
99         // unary ops
100         neg { ^this }
101         bitNot { ^this }
102         abs { ^this }
103         ceil { ^this }
104         floor { ^this }
105         frac { ^this }
106         sign { ^this }
107         sqrt { ^this }
108         exp { ^this }
109         midicps { ^this }
110         cpsmidi { ^this }
111         midiratio { ^this }
112         ratiomidi { ^this }
113         ampdb { ^this }
114         dbamp { ^this }
115         octcps { ^this }
116         cpsoct { ^this }
117         log { ^this }
118         log2 { ^this }
119         log10 { ^this }
120         sin { ^this }
121         cos { ^this }
122         tan { ^this }
123         asin { ^this }
124         acos { ^this }
125         atan { ^this }
126         sinh { ^this }
127         cosh { ^this }
128         tanh { ^this }
129         rand { ^this }
130         rand2 { ^this }
131         linrand { ^this }
132         bilinrand { ^this }
133         sum3rand { ^this }
135         distort { ^this }
136         softclip { ^this }
137         coin { ^this }
138         even { ^this }
139         odd { ^this }
141         rectWindow { ^this }
142         hanWindow { ^this }
143         welWindow { ^this }
144         triWindow { ^this }
146         scurve { ^this }
147         ramp { ^this }
149         // binary ops
150         + { ^this }
151         - { ^this }
152         * { ^this }
153         / { ^this }
154         mod { ^this }
155         min { ^this }
156         max { ^this }
157         bitAnd { ^this }
158         bitOr { ^this }
159         bitXor { ^this }
160         bitHammingDistance { ^this }
161         hammingDistance { |that| ^this.asString.hammingDistance(that.asString) }
162         lcm { ^this }
163         gcd { ^this }
164         round { ^this }
165         roundUp { ^this }
166         trunc { ^this }
167         atan2 { ^this }
168         hypot { ^this }
169         hypotApx { ^this }
170         pow { ^this }
171         leftShift { ^this }
172         rightShift { ^this }
173         unsignedRightShift { ^this }
174         rrand { ^this }
175         exprand { ^this }
177         < { arg aNumber; _LT; ^this }
178         > { arg aNumber; _GT; ^this }
179         <= { arg aNumber; _LE; ^this }
180         >= { arg aNumber; _GE; ^this }
182         degreeToKey { ^this }
184         degrad { ^this }
185         raddeg { ^this }
187         doNumberOp { ^this }
188         doComplexOp { ^this }
189         doSignalOp { ^this }
190         doListOp { arg aSelector, aList;
191                 aList.collect({ arg item;
192                         item.perform(aSelector, this)
193                 })
194         }
196         primitiveIndex {
197                 _Symbol_PrimitiveIndex
198                 ^this.primitiveFailed
199         }
200         specialIndex {
201                 // used by BasicOpUGens to get an ID number for the operator
202                 _Symbol_SpecialIndex
203                 ^this.primitiveFailed
204         }
206         printOn { arg stream;
207                 stream.putAll(this.asString);
208         }
209         storeOn { arg stream;
210                 stream.putAll(this.asCompileString);
211         }
213         // code gen
214         codegen_UGenCtorArg { arg stream;
215                 this.asString.codegen_UGenCtorArg(stream);
216         }
218         archiveAsCompileString { ^true }
220         kr { | val, lag |
221                 ^NamedControl.kr(this, val, lag)
222         }
224         ir { | val |
225                 ^NamedControl.ir(this, val)
226         }
228         tr { | val |
229                 ^NamedControl.tr(this, val)
230         }
232         ar { | val, lag |
233                 ^NamedControl.ar(this, val, lag)
234         }
235         
236         matchOSCAddressPattern { arg addressPattern;
237                 _Symbol_matchOSCPattern
238                 ^this.primitiveFailed
239         }