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,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