class library: implement openTextFile via openDocument
[supercollider.git] / SCClassLibrary / Common / Core / Symbol.sc
blobd3346c31438011b9155e97b7f7b24f0575260536
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         }
59         isMap {
60                 _Symbol_IsMap
61                 // returns true if symbol starts with 'a' or 'c' followed by a number
62         }
63         isRest { ^this.isMap.not }
65         // Environment support
66         // The compiler translates use of an Environment variable like ~myvar
67         // to a call to one of these methods, for example:
68         //                      ~myvar = 5;  translates to:  'myvar'.envirPut(5);
69         // the implementations have been replaced by primitives
70         envirGet {
71                 _Symbol_envirGet
72                 ^currentEnvironment.at(this)
73         }
74         envirPut { arg aValue;
75                 _Symbol_envirPut
76                 currentEnvironment.put(this, aValue);
77                 ^aValue
78         }
80         blend { // Envelopes may call this on the curves inst var.
81                 ^this
82         }
84         ++ { arg aString; ^this.asString ++ aString }
86         asBinOpString {
87                 var res;
88                 res = this.asString;
89                 ^if(res[0].isAlphaNum) { res ++ ":" } { res }
90         }
92         applyTo { arg firstArg ... args;
93                 ^firstArg.performList(this, args)
94         }
96         // support for math on symbols
98         performBinaryOpOnSomething { ^this }
100         // unary ops
101         neg { ^this }
102         bitNot { ^this }
103         abs { ^this }
104         ceil { ^this }
105         floor { ^this }
106         frac { ^this }
107         sign { ^this }
108         sqrt { ^this }
109         exp { ^this }
110         midicps { ^this }
111         cpsmidi { ^this }
112         midiratio { ^this }
113         ratiomidi { ^this }
114         ampdb { ^this }
115         dbamp { ^this }
116         octcps { ^this }
117         cpsoct { ^this }
118         log { ^this }
119         log2 { ^this }
120         log10 { ^this }
121         sin { ^this }
122         cos { ^this }
123         tan { ^this }
124         asin { ^this }
125         acos { ^this }
126         atan { ^this }
127         sinh { ^this }
128         cosh { ^this }
129         tanh { ^this }
130         rand { ^this }
131         rand2 { ^this }
132         linrand { ^this }
133         bilinrand { ^this }
134         sum3rand { ^this }
136         distort { ^this }
137         softclip { ^this }
138         coin { ^this }
139         even { ^this }
140         odd { ^this }
142         rectWindow { ^this }
143         hanWindow { ^this }
144         welWindow { ^this }
145         triWindow { ^this }
147         scurve { ^this }
148         ramp { ^this }
150         // binary ops
151         + { ^this }
152         - { ^this }
153         * { ^this }
154         / { ^this }
155         mod { ^this }
156         min { ^this }
157         max { ^this }
158         bitAnd { ^this }
159         bitOr { ^this }
160         bitXor { ^this }
161         bitHammingDistance { ^this }
162         hammingDistance { |that| ^this.asString.hammingDistance(that.asString) }
163         lcm { ^this }
164         gcd { ^this }
165         round { ^this }
166         roundUp { ^this }
167         trunc { ^this }
168         atan2 { ^this }
169         hypot { ^this }
170         hypotApx { ^this }
171         pow { ^this }
172         leftShift { ^this }
173         rightShift { ^this }
174         unsignedRightShift { ^this }
175         rrand { ^this }
176         exprand { ^this }
178         < { arg aNumber; _LT; ^this }
179         > { arg aNumber; _GT; ^this }
180         <= { arg aNumber; _LE; ^this }
181         >= { arg aNumber; _GE; ^this }
183         degreeToKey { ^this }
185         degrad { ^this }
186         raddeg { ^this }
188         doNumberOp { ^this }
189         doComplexOp { ^this }
190         doSignalOp { ^this }
191         doListOp { arg aSelector, aList;
192                 aList.collect({ arg item;
193                         item.perform(aSelector, this)
194                 })
195         }
197         primitiveIndex {
198                 _Symbol_PrimitiveIndex
199                 ^this.primitiveFailed
200         }
201         specialIndex {
202                 // used by BasicOpUGens to get an ID number for the operator
203                 _Symbol_SpecialIndex
204                 ^this.primitiveFailed
205         }
207         printOn { arg stream;
208                 stream.putAll(this.asString);
209         }
210         storeOn { arg stream;
211                 stream.putAll(this.asCompileString);
212         }
214         // code gen
215         codegen_UGenCtorArg { arg stream;
216                 this.asString.codegen_UGenCtorArg(stream);
217         }
219         archiveAsCompileString { ^true }
221         kr { | val, lag, fixedLag = false |
222                 ^NamedControl.kr(this, val, lag, fixedLag)
223         }
225         ir { | val |
226                 ^NamedControl.ir(this, val)
227         }
229         tr { | val |
230                 ^NamedControl.tr(this, val)
231         }
233         ar { | val, lag |
234                 ^NamedControl.ar(this, val, lag)
235         }
237         matchOSCAddressPattern { arg addressPattern;
238                 _Symbol_matchOSCPattern
239                 ^this.primitiveFailed
240         }
242         help {
243                 this.asString.help
244         }