q-language 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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