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,26 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ class QBlock < QObject
7
+ def block?
8
+ value
9
+ end
10
+
11
+ def call
12
+ value.call
13
+ end
14
+
15
+ def call_arg (object)
16
+ value.call(object)
17
+ end
18
+
19
+ def eval (dynamic)
20
+ env::frame(dynamic) { value.call }
21
+ end
22
+
23
+ def eval_arg (dynamic, object)
24
+ env::frame(dynamic) { value.call(object) }
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ class QClass < QModule
7
+ def class?
8
+ value
9
+ end
10
+
11
+ def init (object)
12
+ obj = value.new
13
+ obj.instance_variable_set(:"@init", object)
14
+ obj
15
+ end
16
+
17
+ def module?
18
+ false
19
+ end
20
+
21
+ def new
22
+ value.new
23
+ end
24
+ end
@@ -0,0 +1,82 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ class QDynamic < QObject
7
+ def def (token, &block)
8
+ env = self.env::replicate
9
+
10
+ value.define_singleton_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.define_singleton_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 dynamic?
29
+ value
30
+ end
31
+
32
+ def eval (&block)
33
+ env::frame(value) { block.call }
34
+ end
35
+
36
+ def eval_arg (object, &block)
37
+ env::frame(value) { block.call(object) }
38
+ end
39
+
40
+ def extend (module_1)
41
+ value.extend(module_1) if module_1.instance_of?(Module)
42
+ value
43
+ end
44
+
45
+ def iget (token)
46
+ value.instance_variable_get(:"@#{token}")
47
+ rescue NameError
48
+ # Illegal name for instance variable
49
+ nil
50
+ end
51
+
52
+ def init_value
53
+ value.instance_variable_get(:"@init")
54
+ end
55
+
56
+ def instance? (class_1)
57
+ value.instance_of?(class_1)
58
+ end
59
+
60
+ def is? (module_1)
61
+ value.is_a?(module_1)
62
+ end
63
+
64
+ def iset (token, object)
65
+ value.instance_variable_set(:"@#{token}", object)
66
+ rescue NameError
67
+ # Illegal name for instance variable
68
+ nil
69
+ end
70
+
71
+ def metaclass
72
+ value.class
73
+ end
74
+
75
+ def send (token)
76
+ value.__send__(:"__Q_#{token}__", nil) rescue nil
77
+ end
78
+
79
+ def send_arg (token, object)
80
+ value.__send__(:"__Q_#{token}__", object) rescue value
81
+ end
82
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ class QFalse < QObject
7
+ def and (object)
8
+ false
9
+ end
10
+
11
+ def choose (object_1, object_2)
12
+ object_2
13
+ end
14
+
15
+ def false?
16
+ true
17
+ end
18
+
19
+ def if (&block)
20
+ nil
21
+ end
22
+
23
+ def not
24
+ true
25
+ end
26
+
27
+ def or (object)
28
+ object
29
+ end
30
+
31
+ def stringify
32
+ "false"
33
+ end
34
+
35
+ def tally
36
+ -1
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,351 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright © 2010-2011 Jesse Sielaff
4
+ #
5
+
6
+ class QHash < QObject
7
+ def any? (&block)
8
+ value.any? do |obj|
9
+ result = yield obj
10
+ break result if env::break?
11
+ result
12
+ end
13
+ end
14
+
15
+ def all? (&block)
16
+ value.all? do |obj|
17
+ result = yield obj
18
+ break result if env::break?
19
+ result
20
+ end
21
+ end
22
+
23
+ def clear
24
+ value.clear
25
+ end
26
+
27
+ def count_by (&block)
28
+ value.count do |obj|
29
+ result = yield obj
30
+ break result if env::break?
31
+ result
32
+ end
33
+ end
34
+
35
+ def cycle (&block)
36
+ value.cycle do |obj|
37
+ result = yield obj
38
+ break result if env::break?
39
+ result
40
+ end
41
+ end
42
+
43
+ def cycle_n (number, &block)
44
+ value.cycle(number) do |obj|
45
+ result = yield obj
46
+ break result if env::break?
47
+ result
48
+ end
49
+ end
50
+
51
+ def delete (object)
52
+ value.delete(object)
53
+ end
54
+
55
+ def delete_if (&block)
56
+ value.delete_if do |obj|
57
+ result = yield obj
58
+ break result if env::break?
59
+ result
60
+ end
61
+ end
62
+
63
+ def drop (number)
64
+ return value.dup if number < 0
65
+ value.drop(number)
66
+ end
67
+
68
+ def drop_while (&block)
69
+ value.drop_while do |obj|
70
+ result = yield obj
71
+ break result if env::break?
72
+ result
73
+ end
74
+ end
75
+
76
+ def each (&block)
77
+ value.each do |obj|
78
+ result = yield obj
79
+ break result if env::break?
80
+ result
81
+ end
82
+ end
83
+
84
+ def each_cons (&block)
85
+ return nil unless number > 0
86
+
87
+ value.each_cons do |obj|
88
+ result = yield obj
89
+ break result if env::break?
90
+ end
91
+ end
92
+
93
+ def each_key (&block)
94
+ value.each_key do |obj|
95
+ result = yield obj
96
+ break result if env::break?
97
+ result
98
+ end
99
+ end
100
+
101
+ def each_slice (&block)
102
+ return nil unless number > 0
103
+
104
+ value.each_slice do |obj|
105
+ result = yield obj
106
+ break result if env::break?
107
+ result
108
+ end
109
+ end
110
+
111
+ def each_value (&block)
112
+ value.each_value do |obj|
113
+ result = yield obj
114
+ break result if env::break?
115
+ result
116
+ end
117
+ end
118
+
119
+ def each_with_index (&block)
120
+ value.each_with_index do |(k,v), i|
121
+ result = yield [k,v,i]
122
+ break result if env::break?
123
+ end
124
+ end
125
+
126
+ def each_with_object (object, &block)
127
+ value.each_with_object(object) do |(k,v), o|
128
+ result = yield [k,v,o]
129
+ break result if env::break?
130
+ end
131
+
132
+ object
133
+ end
134
+
135
+ def empty?
136
+ value.empty?
137
+ end
138
+
139
+ def find (&block)
140
+ value.find do |obj|
141
+ result = yield obj
142
+ break result if env::break?
143
+ result
144
+ end
145
+ end
146
+
147
+ def flatten
148
+ value.flatten
149
+ end
150
+
151
+ def get (object)
152
+ value[object]
153
+ end
154
+
155
+ def group_by (&block)
156
+ value.group_by do |obj|
157
+ result = yield obj
158
+ break result if env::break?
159
+ result
160
+ end
161
+ end
162
+
163
+ def hash?
164
+ value
165
+ end
166
+
167
+ def inject (object, &block)
168
+ value.inject(object) do |o,(k,v)|
169
+ result = yield [o,k,v]
170
+ break result if env::break?
171
+ result
172
+ end
173
+ end
174
+
175
+ def invert
176
+ value.invert
177
+ end
178
+
179
+ def key (object)
180
+ value.key(object)
181
+ end
182
+
183
+ def key? (object)
184
+ value.has_key?(object)
185
+ end
186
+
187
+ def keys
188
+ value.keys
189
+ end
190
+
191
+ def length
192
+ value.length
193
+ end
194
+
195
+ def many? (&block)
196
+ value.count do |obj|
197
+ result = yield obj
198
+ return result if env::break?
199
+ result
200
+ end > 1
201
+ end
202
+
203
+ def map (&block)
204
+ value.collect do |obj|
205
+ result = yield obj
206
+ break result if env::break?
207
+ result
208
+ end
209
+ end
210
+
211
+ def max
212
+ value.max
213
+ rescue ArgumentError
214
+ # Hash values cannot be compared
215
+ nil
216
+ end
217
+
218
+ def max_by (&object)
219
+ value.max_by do |obj|
220
+ result = yield obj
221
+ return result if env::break?
222
+ result
223
+ end
224
+ rescue ArgumentError
225
+ # Hash values cannot be compared
226
+ nil
227
+ end
228
+
229
+ def merge (hash)
230
+ value.merge(hash)
231
+ end
232
+
233
+ def merge! (hash)
234
+ value.merge!(hash)
235
+ end
236
+
237
+ def min
238
+ value.min
239
+ rescue ArgumentError
240
+ # Hash values cannot be compared
241
+ nil
242
+ end
243
+
244
+ def min_by (&object)
245
+ value.min_by do |obj|
246
+ result = yield obj
247
+ return result if env::break?
248
+ result
249
+ end
250
+ rescue ArgumentError
251
+ # Hash values cannot be compared
252
+ nil
253
+ end
254
+
255
+ def minmax
256
+ value.minmax
257
+ rescue ArgumentError
258
+ # Hash values cannot be compared
259
+ nil
260
+ end
261
+
262
+ def minmax_by (&object)
263
+ value.minmax_by do |obj|
264
+ result = yield obj
265
+ return result if env::break?
266
+ result
267
+ end
268
+ rescue ArgumentError
269
+ # Hash values cannot be compared
270
+ nil
271
+ end
272
+
273
+ def partition (&block)
274
+ value.partition do |obj|
275
+ result = yield obj
276
+ return result if env::break?
277
+ result
278
+ end
279
+ end
280
+
281
+ def reject (&block)
282
+ value.reject do |obj|
283
+ result = yield obj
284
+ break result if env::break?
285
+ result
286
+ end
287
+ end
288
+
289
+ def reject! (&block)
290
+ value.reject! do |obj|
291
+ result = yield obj
292
+ break result if env::break?
293
+ result
294
+ end
295
+ end
296
+
297
+ def replace (hash)
298
+ value.replace(hash)
299
+ end
300
+
301
+ def select (&block)
302
+ value.select do |obj|
303
+ result = yield obj
304
+ break result if env::break?
305
+ result
306
+ end
307
+ end
308
+
309
+ def select! (&block)
310
+ value.select! do |obj|
311
+ result = yield obj
312
+ break result if env::break?
313
+ result
314
+ end
315
+ end
316
+
317
+ def set (object_1, object_2)
318
+ unless value.length >= env::max_hash_length && !value.has_key?(object_1)
319
+ value[object_1] = object_2
320
+ end
321
+ end
322
+
323
+ def shift
324
+ value.shift
325
+ end
326
+
327
+ def take (number)
328
+ return value.dup if number < 0
329
+ value.take(number)
330
+ end
331
+
332
+ def take_while (&block)
333
+ value.take_while do |obj|
334
+ result = yield obj
335
+ break result if env::break?
336
+ result
337
+ end
338
+ end
339
+
340
+ def value? (object)
341
+ value.has_value?(object)
342
+ end
343
+
344
+ def values
345
+ value.values
346
+ end
347
+
348
+ def values_at (*every_object)
349
+ value.values_at(*every_object)
350
+ end
351
+ end