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