q-language 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/.gemtest +0 -0
  2. data/Rakefile +10 -0
  3. data/lib/q-language.rb +9 -0
  4. data/lib/q-language/device.rb +166 -0
  5. data/lib/q-language/environment.rb +358 -0
  6. data/lib/q-language/methods/array.rb +523 -0
  7. data/lib/q-language/methods/block.rb +26 -0
  8. data/lib/q-language/methods/class.rb +24 -0
  9. data/lib/q-language/methods/dynamic.rb +82 -0
  10. data/lib/q-language/methods/false.rb +47 -0
  11. data/lib/q-language/methods/hash.rb +351 -0
  12. data/lib/q-language/methods/implicit.rb +345 -0
  13. data/lib/q-language/methods/module.rb +39 -0
  14. data/lib/q-language/methods/nil.rb +47 -0
  15. data/lib/q-language/methods/number.rb +118 -0
  16. data/lib/q-language/methods/object.rb +155 -0
  17. data/lib/q-language/methods/string.rb +157 -0
  18. data/lib/q-language/methods/time.rb +110 -0
  19. data/lib/q-language/methods/token.rb +72 -0
  20. data/lib/q-language/methods/true.rb +14 -0
  21. data/lib/q-language/node.rb +45 -0
  22. data/lib/q-language/object.rb +125 -0
  23. data/lib/q-language/parser.rb +104 -0
  24. data/lib/q-language/writer.rb +90 -0
  25. data/test/methods/test_array.rb +191 -0
  26. data/test/methods/test_block.rb +66 -0
  27. data/test/methods/test_class.rb +34 -0
  28. data/test/methods/test_dynamic.rb +158 -0
  29. data/test/methods/test_false.rb +60 -0
  30. data/test/methods/test_hash.rb +10 -0
  31. data/test/methods/test_implicit.rb +332 -0
  32. data/test/methods/test_module.rb +55 -0
  33. data/test/methods/test_nil.rb +60 -0
  34. data/test/methods/test_number.rb +10 -0
  35. data/test/methods/test_object.rb +157 -0
  36. data/test/methods/test_string.rb +271 -0
  37. data/test/methods/test_time.rb +181 -0
  38. data/test/methods/test_token.rb +92 -0
  39. data/test/methods/test_true.rb +16 -0
  40. data/test/test.rb +23 -0
  41. metadata +103 -0
@@ -0,0 +1,345 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ class QImplicit < Q_Object
7
+ def all? (&block)
8
+ value.all? do |obj|
9
+ result = yield obj
10
+ break result if env::break?
11
+ result
12
+ end
13
+ end
14
+
15
+ def any? (&block)
16
+ value.any? do |obj|
17
+ result = yield obj
18
+ break result if env::break?
19
+ result
20
+ end
21
+ end
22
+
23
+ def array
24
+ []
25
+ end
26
+
27
+ def arrays (*every_array)
28
+ every_array
29
+ end
30
+
31
+ def block (&block)
32
+ block
33
+ end
34
+
35
+ def blocks (*every_block)
36
+ every_block
37
+ end
38
+
39
+ def break_if (&block)
40
+ if result = yield
41
+ env::break!
42
+ return nil
43
+ end
44
+
45
+ result
46
+ end
47
+
48
+ def break_unless (&block)
49
+ unless result = yield
50
+ env::break!
51
+ return nil
52
+ end
53
+
54
+ result
55
+ end
56
+
57
+ def class
58
+ klass = Class.new
59
+ klass.send(:define_method, :to_q) { QDynamic.new(self) }
60
+ klass
61
+ end
62
+
63
+ def classes (*every_class)
64
+ every_class
65
+ end
66
+
67
+ def compact
68
+ value.compact
69
+ end
70
+
71
+ def compact!
72
+ value.compact!
73
+ value.dup
74
+ end
75
+
76
+ def count (object)
77
+ value.count(object)
78
+ end
79
+
80
+ def count_by (&block)
81
+ value.count do |obj|
82
+ result = yield obj
83
+ break result if env::break?
84
+ result
85
+ end
86
+ end
87
+
88
+ def def (token, &block)
89
+ env_object = env::object
90
+ env = self.env::replicate
91
+
92
+ env_object.define_singleton_method(:"__Q_#{token}__") do |object = nil|
93
+ env::frame(self) { block.call(object, env) }
94
+ end
95
+
96
+ env = self.env::replicate
97
+ env.max_nodes = self.env.max_method_nodes
98
+
99
+ env_object.define_singleton_method(token) do |object = nil|
100
+ begin
101
+ env::frame(self) { block.call(object, env) }
102
+ rescue Q_Environment::TooManyNodes
103
+ nil
104
+ end
105
+ end
106
+
107
+ env_object
108
+ end
109
+
110
+ def e
111
+ Number.e
112
+ end
113
+
114
+ def each (&block)
115
+ value.dup.each do |obj|
116
+ result = yield obj
117
+ break result if env::break?
118
+ result
119
+ end
120
+ end
121
+
122
+ def elect (*every_object, object)
123
+ object
124
+ end
125
+
126
+ def false
127
+ false
128
+ end
129
+
130
+ def falses (*every_false)
131
+ every_false
132
+ end
133
+
134
+ def hash
135
+ {}
136
+ end
137
+
138
+ def hashes (*every_hash)
139
+ every_hash
140
+ end
141
+
142
+ def i
143
+ Number.i
144
+ end
145
+
146
+ def jump_if (&block)
147
+ if result = yield
148
+ env::jump!
149
+ return nil
150
+ end
151
+
152
+ result
153
+ end
154
+
155
+ def jump_unless (&block)
156
+ unless result = yield
157
+ env::jump!
158
+ return nil
159
+ end
160
+
161
+ result
162
+ end
163
+
164
+ def loop (&block)
165
+ begin
166
+ result = yield
167
+ return result if env::break?
168
+ end while true
169
+ end
170
+
171
+ def map (&block)
172
+ value.collect do |obj|
173
+ result = yield obj
174
+ return result if env::break?
175
+ result
176
+ end
177
+ end
178
+
179
+ def many? (&block)
180
+ value.count do |obj|
181
+ result = yield obj
182
+ return result if env::break?
183
+ result
184
+ end > 2
185
+ end
186
+
187
+ def module
188
+ Module.new
189
+ end
190
+
191
+ def modules (*every_module)
192
+ every_module
193
+ end
194
+
195
+ def nan
196
+ Number.nan
197
+ end
198
+
199
+ def neg_inf
200
+ Number.neg_inf
201
+ end
202
+
203
+ def neg_one
204
+ -1
205
+ end
206
+
207
+ def new
208
+ klass = Class.new
209
+ klass.send(:define_method, :to_q) { QDynamic.new(self) }
210
+ klass.new
211
+ end
212
+
213
+ def newline
214
+ ?\n
215
+ end
216
+
217
+ def nil
218
+ nil
219
+ end
220
+
221
+ def nils (*every_nil)
222
+ every_nil
223
+ end
224
+
225
+ def none? (&block)
226
+ value.none? do |obj|
227
+ result = yield obj
228
+ break result if env::break?
229
+ result
230
+ end
231
+ end
232
+
233
+ def now
234
+ Time.now
235
+ end
236
+
237
+ def numbers (*every_number)
238
+ every_number
239
+ end
240
+
241
+ def objects (*every_object)
242
+ every_object
243
+ end
244
+
245
+ def one
246
+ 1
247
+ end
248
+
249
+ def one? (&block)
250
+ value.one? do |obj|
251
+ result = yield obj
252
+ break result if env::break?
253
+ result
254
+ end
255
+ end
256
+
257
+ def pi
258
+ Number.pi
259
+ end
260
+
261
+ def pos_inf
262
+ Number.pos_inf
263
+ end
264
+
265
+ def self
266
+ env::self
267
+ end
268
+
269
+ def skip_a (object_1, object_2)
270
+ object_2
271
+ end
272
+
273
+ def skip_b (object_1, object_2)
274
+ object_1
275
+ end
276
+
277
+ def space
278
+ ' '
279
+ end
280
+
281
+ def string
282
+ ''
283
+ end
284
+
285
+ def strings (*every_string)
286
+ every_string
287
+ end
288
+
289
+ def tab
290
+ ?\t
291
+ end
292
+
293
+ def three
294
+ 3
295
+ end
296
+
297
+ def times (*every_time)
298
+ every_time
299
+ end
300
+
301
+ def tokens (*every_token)
302
+ every_token
303
+ end
304
+
305
+ def true
306
+ true
307
+ end
308
+
309
+ def trues (*every_true)
310
+ every_true
311
+ end
312
+
313
+ def two
314
+ 2
315
+ end
316
+
317
+ def uniq
318
+ value.uniq
319
+ end
320
+
321
+ def uniq!
322
+ value.uniq!
323
+ value.dup
324
+ end
325
+
326
+ def unset
327
+ env::unset(env::last_assigned_variable)
328
+ end
329
+
330
+ def until (&block)
331
+ until result = yield
332
+ return result if env::break?
333
+ end
334
+ end
335
+
336
+ def while (&block)
337
+ while result = yield
338
+ return result if env::break?
339
+ end
340
+ end
341
+
342
+ def zero
343
+ 0
344
+ end
345
+ end
@@ -0,0 +1,39 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ class QModule < QObject
7
+ def def (token, &block)
8
+ env = self.env::replicate
9
+
10
+ value.send(:define_method, :"__Q_#{token}__") do |object = nil|
11
+ env::frame(self) { block.call(object, env) }
12
+ end
13
+
14
+ env = self.env::replicate
15
+ env.max_nodes = self.env.max_method_nodes
16
+
17
+ value.send(:define_method, token) do |object = nil|
18
+ begin
19
+ env::frame(self) { block.call(object, env) }
20
+ rescue Q_Environment::TooManyNodes
21
+ nil
22
+ end
23
+ end
24
+
25
+ value
26
+ end
27
+
28
+ def include (module_1)
29
+ value.send(:include, module_1) if module_1.instance_of?(Module)
30
+ value
31
+ rescue ArgumentError
32
+ # Cyclic include
33
+ value
34
+ end
35
+
36
+ def module?
37
+ value
38
+ end
39
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ class QNil < QObject
7
+ def and (object)
8
+ nil
9
+ end
10
+
11
+ def choose (object_1, object_2)
12
+ object_2
13
+ end
14
+
15
+ def if (&block)
16
+ nil
17
+ end
18
+
19
+ def nil?
20
+ true
21
+ end
22
+
23
+ def not
24
+ true
25
+ end
26
+
27
+ def or (object)
28
+ object
29
+ end
30
+
31
+ def stringify
32
+ "nil"
33
+ end
34
+
35
+ def tally
36
+ 0
37
+ end
38
+
39
+ def unless (&block)
40
+ env::jump!
41
+ yield
42
+ end
43
+
44
+ def xor (object)
45
+ !!object
46
+ end
47
+ end
@@ -0,0 +1,118 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ class QNumber < QObject
7
+ def QNumber.from_s (string)
8
+ Number(string)
9
+ end
10
+
11
+ def abs
12
+ value.abs
13
+ end
14
+
15
+ def add (number)
16
+ value + number
17
+ end
18
+
19
+ def area
20
+ value.area
21
+ end
22
+
23
+ def ceil
24
+ value.ceil
25
+ end
26
+
27
+ def complex?
28
+ value.complex?
29
+ end
30
+
31
+ def conjugate
32
+ value.conjugate
33
+ end
34
+
35
+ def cos
36
+ # value.cos
37
+ end
38
+
39
+ def diagonal
40
+ value.diagonal
41
+ end
42
+
43
+ def divide (number)
44
+ value / number
45
+ end
46
+
47
+ def exp
48
+ # value.exp
49
+ end
50
+
51
+ def floor
52
+ value.floor
53
+ end
54
+
55
+ def imag
56
+ value.imag
57
+ end
58
+
59
+ def join (number)
60
+ # value.join(number)
61
+ end
62
+
63
+ def log
64
+ # value.log
65
+ end
66
+
67
+ def modulo (number)
68
+ # value.modulo(number)
69
+ end
70
+
71
+ def multiply (number)
72
+ value * number
73
+ end
74
+
75
+ def negate
76
+ -value
77
+ end
78
+
79
+ def nominal
80
+ value.nominal
81
+ end
82
+
83
+ def number?
84
+ value
85
+ end
86
+
87
+ def real
88
+ value.real
89
+ end
90
+
91
+ def real?
92
+ value.real?
93
+ end
94
+
95
+ def reflect
96
+ value.reflect
97
+ end
98
+
99
+ def round
100
+ value.round
101
+ end
102
+
103
+ def sin
104
+ # value.sin
105
+ end
106
+
107
+ def sqrt
108
+ value.sqrt
109
+ end
110
+
111
+ def square
112
+ # value.square
113
+ end
114
+
115
+ def subtract (number)
116
+ value - number
117
+ end
118
+ end