ytl 0.0.1 → 0.0.2
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.
- data/lib/ytl/macro.rb +419 -0
- data/lib/ytl.rb +2 -0
- data/runtime/prelude.rb +52 -0
- data/test/basictest.rb +33 -0
- data/test/classtest.rb +2 -0
- data/test/ivtest.rb +19 -0
- data/test/looptest.rb +15 -0
- data/test/macrotest.rb +26 -0
- metadata +10 -5
data/lib/ytl/macro.rb
ADDED
@@ -0,0 +1,419 @@
|
|
1
|
+
module YTLJit
|
2
|
+
module VM
|
3
|
+
class ToRubyContext
|
4
|
+
def initialize
|
5
|
+
@ret_code = [""]
|
6
|
+
@jmp_tab = {}
|
7
|
+
@defined_method = {}
|
8
|
+
@work_prefix = []
|
9
|
+
end
|
10
|
+
|
11
|
+
attr :ret_code
|
12
|
+
attr :jmp_tab
|
13
|
+
attr :defined_method
|
14
|
+
attr :work_prefix
|
15
|
+
end
|
16
|
+
|
17
|
+
module Node
|
18
|
+
class BaseNode
|
19
|
+
def to_ruby(context)
|
20
|
+
context
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class DummyNode
|
25
|
+
def to_ruby(context)
|
26
|
+
context
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class TopNode
|
31
|
+
end
|
32
|
+
|
33
|
+
class MethodTopNode
|
34
|
+
def to_ruby(context)
|
35
|
+
# context.ret_code.last << "{ #{@name} "
|
36
|
+
context.ret_code.last << "{ "
|
37
|
+
context.ret_code.push ""
|
38
|
+
context = @body.to_ruby(context)
|
39
|
+
args = context.ret_code.pop
|
40
|
+
pre = context.work_prefix.join('_')
|
41
|
+
if args != "" then
|
42
|
+
context.ret_code.last << "|#{args}|"
|
43
|
+
end
|
44
|
+
context.ret_code.last << "#{pre}state = 0\n"
|
45
|
+
context.ret_code.last << "#{pre}value = nil\n"
|
46
|
+
context.ret_code.last << "evalstr = []\n"
|
47
|
+
context.ret_code.last << "[while true\n"
|
48
|
+
# context.ret_code.last << "p #{pre}state\n"
|
49
|
+
context.ret_code.last << "case #{pre}state\n"
|
50
|
+
context.ret_code.last << "when 0\n"
|
51
|
+
context = @body.body.to_ruby(context)
|
52
|
+
context.ret_code.last << "end\n"
|
53
|
+
context.ret_code.last << "end, evalstr]\n"
|
54
|
+
context.ret_code.last << "}\n"
|
55
|
+
context
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
class BlockTopNode
|
60
|
+
def to_ruby(context)
|
61
|
+
context.ret_code.last << "{ "
|
62
|
+
context.ret_code.push ""
|
63
|
+
context = @body.to_ruby(context)
|
64
|
+
args = context.ret_code.pop
|
65
|
+
if args != "" then
|
66
|
+
context.ret_code.last << "| #{args} | \n"
|
67
|
+
end
|
68
|
+
pre = context.work_prefix.join('_')
|
69
|
+
context.ret_code.last << "#{pre}state = 0\n"
|
70
|
+
context.ret_code.last << "#{pre}value = nil\n"
|
71
|
+
context.ret_code.last << "while true\n"
|
72
|
+
# context.ret_code.last << "p #{pre}state\n"
|
73
|
+
context.ret_code.last << "case #{pre}state\n"
|
74
|
+
context.ret_code.last << "when 0\n"
|
75
|
+
context = @body.body.to_ruby(context)
|
76
|
+
context.ret_code.last << "end\n"
|
77
|
+
context.ret_code.last << "end\n"
|
78
|
+
context.ret_code.last << "}\n"
|
79
|
+
context
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
class ClassTopNode
|
84
|
+
end
|
85
|
+
|
86
|
+
class TopTopNode
|
87
|
+
end
|
88
|
+
|
89
|
+
class LocalFrameInfoNode
|
90
|
+
def to_ruby(context)
|
91
|
+
argpos = 0
|
92
|
+
visitsys = false
|
93
|
+
@frame_layout.each do |vinf|
|
94
|
+
if vinf.is_a?(LocalVarNode) then
|
95
|
+
argpos = argpos + 1
|
96
|
+
if argpos > 3 and visitsys then
|
97
|
+
context = vinf.to_ruby(context)
|
98
|
+
context.ret_code.last << ", "
|
99
|
+
end
|
100
|
+
else
|
101
|
+
visitsys = true
|
102
|
+
argpos = 0
|
103
|
+
end
|
104
|
+
end
|
105
|
+
context.ret_code.last.chop!
|
106
|
+
context.ret_code.last.chop!
|
107
|
+
|
108
|
+
context
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
class LocalVarNode
|
113
|
+
def to_ruby(context)
|
114
|
+
case kind
|
115
|
+
when :arg, :local_var
|
116
|
+
context.ret_code.last << "_#{@name.to_s}"
|
117
|
+
|
118
|
+
when :rest_arg
|
119
|
+
context.ret_code.last << "*_#{@name.to_s}"
|
120
|
+
|
121
|
+
else
|
122
|
+
p kind
|
123
|
+
|
124
|
+
end
|
125
|
+
|
126
|
+
context
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
class SystemValueNode
|
131
|
+
end
|
132
|
+
|
133
|
+
class GuardNode
|
134
|
+
end
|
135
|
+
|
136
|
+
class MethodEndNode
|
137
|
+
end
|
138
|
+
|
139
|
+
class BlockEndNode
|
140
|
+
end
|
141
|
+
|
142
|
+
class ClassEndNode
|
143
|
+
end
|
144
|
+
|
145
|
+
class SetResultNode
|
146
|
+
def to_ruby(context)
|
147
|
+
context.ret_code.last << "break "
|
148
|
+
context = @value_node.to_ruby(context)
|
149
|
+
context.ret_code.last << "\n"
|
150
|
+
@body.to_ruby(context)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
class PhiNode
|
155
|
+
def to_ruby(context)
|
156
|
+
pre = context.work_prefix.join('_')
|
157
|
+
context.ret_code.last << "#{pre}value"
|
158
|
+
context
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
class LocalLabel
|
163
|
+
def to_ruby(context)
|
164
|
+
context.ret_code.last << "when #{context.jmp_tab[self]}\n"
|
165
|
+
@body.to_ruby(context)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
class BranchCommonNode
|
170
|
+
def to_ruby_common(context, unlessp)
|
171
|
+
nf = false
|
172
|
+
if context.jmp_tab[@jmp_to_node] == nil then
|
173
|
+
context.jmp_tab[@jmp_to_node] = context.jmp_tab.size + 1
|
174
|
+
nf = true
|
175
|
+
end
|
176
|
+
jlab = context.jmp_tab[@jmp_to_node]
|
177
|
+
|
178
|
+
blab = context.jmp_tab.size + 1
|
179
|
+
context.jmp_tab[@body] = blab
|
180
|
+
|
181
|
+
context.ret_code.push ""
|
182
|
+
context = @cond.to_ruby(context)
|
183
|
+
cc = context.ret_code.pop
|
184
|
+
pre = context.work_prefix.join('_')
|
185
|
+
context.ret_code.last << "if #{cc} then\n"
|
186
|
+
if unlessp then
|
187
|
+
context.ret_code.last << "#{pre}state = #{blab}\n"
|
188
|
+
context.ret_code.last << "else\n"
|
189
|
+
context.ret_code.last << "#{pre}state = #{jlab}\n"
|
190
|
+
else
|
191
|
+
context.ret_code.last << "#{pre}state = #{jlab}\n"
|
192
|
+
context.ret_code.last << "else\n"
|
193
|
+
context.ret_code.last << "#{pre}state = #{blab}\n"
|
194
|
+
end
|
195
|
+
context.ret_code.last << "end\n"
|
196
|
+
|
197
|
+
if nf then
|
198
|
+
context = @jmp_to_node.to_ruby(context)
|
199
|
+
end
|
200
|
+
|
201
|
+
context.ret_code.last << "when #{context.jmp_tab[@body]}\n"
|
202
|
+
context = @body.to_ruby(context)
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
class BranchIfNode
|
207
|
+
def to_ruby(context)
|
208
|
+
to_ruby_common(context, false)
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
class BranchUnlessNode
|
213
|
+
def to_ruby(context)
|
214
|
+
to_ruby_common(context, true)
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
class JumpNode
|
219
|
+
def to_ruby(context)
|
220
|
+
nf = false
|
221
|
+
if context.jmp_tab[@jmp_to_node] == nil then
|
222
|
+
context.jmp_tab[@jmp_to_node] = context.jmp_tab.size + 1
|
223
|
+
nf = true
|
224
|
+
end
|
225
|
+
pre = context.work_prefix.join('_')
|
226
|
+
nestat = context.jmp_tab[@jmp_to_node]
|
227
|
+
context.ret_code.last << "#{pre}state = #{nestat}\n"
|
228
|
+
valnode = @jmp_to_node.come_from[self]
|
229
|
+
if valnode then
|
230
|
+
context.ret_code.push ""
|
231
|
+
context = valnode.to_ruby(context)
|
232
|
+
val = context.ret_code.pop
|
233
|
+
context.ret_code.last << "#{pre}value = #{val}\n"
|
234
|
+
end
|
235
|
+
if nf then
|
236
|
+
@jmp_to_node.to_ruby(context)
|
237
|
+
else
|
238
|
+
context
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
class LetNode
|
244
|
+
end
|
245
|
+
|
246
|
+
class LiteralNode
|
247
|
+
def to_ruby(context)
|
248
|
+
context.ret_code.last << get_constant_value[0].inspect
|
249
|
+
context
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
class ClassValueNode
|
254
|
+
end
|
255
|
+
|
256
|
+
class SpecialObjectNode
|
257
|
+
end
|
258
|
+
|
259
|
+
class YieldNode
|
260
|
+
def to_ruby(context)
|
261
|
+
arg = @parent.arguments
|
262
|
+
context.ret_code.last << "yield"
|
263
|
+
context.ret_code.last << "("
|
264
|
+
arg[3..-1].each do |ae|
|
265
|
+
context = ae.to_ruby(context)
|
266
|
+
context.ret_code.last << ", "
|
267
|
+
end
|
268
|
+
context.ret_code.last.chop!
|
269
|
+
context.ret_code.last.chop!
|
270
|
+
context.ret_code.last << ")\n"
|
271
|
+
context
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
class FixArgCApiNode
|
276
|
+
API_TAB = {
|
277
|
+
"rb_str_append" => "+",
|
278
|
+
"rb_obj_as_string" => "to_s",
|
279
|
+
}
|
280
|
+
def to_ruby(context)
|
281
|
+
arg = @parent.arguments
|
282
|
+
context.ret_code.last << "("
|
283
|
+
context = arg[0].to_ruby(context)
|
284
|
+
context.ret_code.last << "."
|
285
|
+
context.ret_code.last << API_TAB[@name]
|
286
|
+
if arg[1] then
|
287
|
+
context.ret_code.last << "("
|
288
|
+
arg[1..-1].each do |ae|
|
289
|
+
context = ae.to_ruby(context)
|
290
|
+
context.ret_code.last << ", "
|
291
|
+
end
|
292
|
+
context.ret_code.last.chop!
|
293
|
+
context.ret_code.last.chop!
|
294
|
+
context.ret_code.last << ")"
|
295
|
+
end
|
296
|
+
context.ret_code.last << ")\n"
|
297
|
+
context
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
301
|
+
class MethodSelectNode
|
302
|
+
def to_ruby(context)
|
303
|
+
arg = @parent.arguments
|
304
|
+
context.ret_code.last << "("
|
305
|
+
if @parent.is_fcall or @parent.is_vcall then
|
306
|
+
context.ret_code.last << @name.to_s
|
307
|
+
else
|
308
|
+
context = arg[2].to_ruby(context)
|
309
|
+
context.ret_code.last << ".#{@name}"
|
310
|
+
end
|
311
|
+
if arg[3] then
|
312
|
+
context.ret_code.last << "("
|
313
|
+
arg[3..-1].each do |ae|
|
314
|
+
context = ae.to_ruby(context)
|
315
|
+
context.ret_code.last << ", "
|
316
|
+
end
|
317
|
+
context.ret_code.last.chop!
|
318
|
+
context.ret_code.last.chop!
|
319
|
+
context.ret_code.last << ")"
|
320
|
+
end
|
321
|
+
if arg[1].is_a?(BlockTopNode) then
|
322
|
+
context.ret_code.last << " "
|
323
|
+
context.work_prefix.push "bl"
|
324
|
+
context = arg[1].to_ruby(context)
|
325
|
+
context.work_prefix.pop
|
326
|
+
end
|
327
|
+
context.ret_code.last << ")\n"
|
328
|
+
context
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
class VariableRefCommonNode
|
333
|
+
end
|
334
|
+
|
335
|
+
class LocalVarRefCommonNode
|
336
|
+
end
|
337
|
+
|
338
|
+
class LocalVarRefNode
|
339
|
+
def to_ruby(context)
|
340
|
+
cfi = @current_frame_info
|
341
|
+
off = cfi.real_offset(@offset)
|
342
|
+
lv = cfi.frame_layout[off]
|
343
|
+
context.ret_code.last << " _#{lv.name.to_s} "
|
344
|
+
context
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
class SelfRefNode
|
349
|
+
def to_ruby(context)
|
350
|
+
context.ret_code.last << " self "
|
351
|
+
context
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
class LocalAssignNode
|
356
|
+
def to_ruby(context)
|
357
|
+
cfi = @current_frame_info
|
358
|
+
off = cfi.real_offset(@offset)
|
359
|
+
lv = cfi.frame_layout[off]
|
360
|
+
context.ret_code.last << "_#{lv.name.to_s} = "
|
361
|
+
context = @val.to_ruby(context)
|
362
|
+
context.ret_code.last << "\n"
|
363
|
+
@body.to_ruby(context)
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
class InstanceVarRefCommonNode
|
368
|
+
end
|
369
|
+
|
370
|
+
class InstanceVarRefNode
|
371
|
+
def to_ruby(context)
|
372
|
+
context.ret_code.last << " #{@name.to_s} "
|
373
|
+
context
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
class InstanceVarAssignNode
|
378
|
+
def to_ruby(context)
|
379
|
+
context.ret_code.last << "#{@name.to_s} = "
|
380
|
+
context = @val.to_ruby(context)
|
381
|
+
context.ret_code.last << "\n"
|
382
|
+
context
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
class ConstantRefNode
|
387
|
+
def to_ruby(context)
|
388
|
+
context.ret_code.last << @name.to_s
|
389
|
+
context
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
393
|
+
class ConstantAssignNode
|
394
|
+
def to_ruby(context)
|
395
|
+
context.ret_code.last << "#{@name.to_s} = "
|
396
|
+
context = @val.to_ruby(context)
|
397
|
+
context.ret_code.last << "\n"
|
398
|
+
context
|
399
|
+
end
|
400
|
+
end
|
401
|
+
|
402
|
+
class SendNode
|
403
|
+
def to_ruby(context)
|
404
|
+
context = @func.to_ruby(context)
|
405
|
+
@body.to_ruby(context)
|
406
|
+
end
|
407
|
+
end
|
408
|
+
|
409
|
+
class SendEvalNode
|
410
|
+
def to_ruby(context)
|
411
|
+
context.ret_code.last << "evalstr <<"
|
412
|
+
context = @arguments[3].to_ruby(context)
|
413
|
+
context.ret_code.last << "\n"
|
414
|
+
@body.to_ruby(context)
|
415
|
+
end
|
416
|
+
end
|
417
|
+
end
|
418
|
+
end
|
419
|
+
end
|
data/lib/ytl.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'ytljit'
|
2
2
|
require 'ytl/accmem.rb'
|
3
|
+
require 'ytl/macro.rb'
|
3
4
|
require 'ytl/importobj.rb'
|
4
5
|
require 'pp'
|
5
6
|
require 'optparse'
|
@@ -111,6 +112,7 @@ module YTL
|
|
111
112
|
c_context.current_method_signature.push sig
|
112
113
|
c_context.options = options
|
113
114
|
c_context = tnode.compile(c_context)
|
115
|
+
tnode.make_frame_struct_tab
|
114
116
|
|
115
117
|
if fn = options[:write_node_after_ti] then
|
116
118
|
File.open(fn, "w") do |fp|
|
data/runtime/prelude.rb
CHANGED
@@ -1,6 +1,19 @@
|
|
1
1
|
# runtime library written in ytl
|
2
2
|
<<-'EOS'
|
3
3
|
#
|
4
|
+
def attr(*x)
|
5
|
+
x.each do |ele|
|
6
|
+
eval "def #{ele}; @#{ele} ; end"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def attr_accessor(*x)
|
11
|
+
x.each do |ele|
|
12
|
+
eval "def #{ele}; @#{ele} ; end\n"
|
13
|
+
eval "def #{ele}=(val); @#{ele} = val ; end"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
4
17
|
class Array
|
5
18
|
def each
|
6
19
|
i = 0
|
@@ -14,6 +27,26 @@ class Array
|
|
14
27
|
end
|
15
28
|
end
|
16
29
|
|
30
|
+
class Range
|
31
|
+
def each
|
32
|
+
i = self.first
|
33
|
+
e = self.last
|
34
|
+
if self.exclude_end? then
|
35
|
+
while i < e
|
36
|
+
yield i
|
37
|
+
i = i + 1
|
38
|
+
end
|
39
|
+
else
|
40
|
+
while i <= e
|
41
|
+
yield i
|
42
|
+
i = i + 1
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
e
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
17
50
|
class Fixnum
|
18
51
|
def times
|
19
52
|
i = 0
|
@@ -24,6 +57,25 @@ class Fixnum
|
|
24
57
|
|
25
58
|
self
|
26
59
|
end
|
60
|
+
|
61
|
+
def step(max, st)
|
62
|
+
i = self
|
63
|
+
while i < max
|
64
|
+
yield i
|
65
|
+
i = i + st
|
66
|
+
end
|
67
|
+
|
68
|
+
self
|
69
|
+
end
|
70
|
+
|
71
|
+
def **(n)
|
72
|
+
a = 1
|
73
|
+
while n > 0
|
74
|
+
a = a * self
|
75
|
+
n = n - 1
|
76
|
+
end
|
77
|
+
a
|
78
|
+
end
|
27
79
|
end
|
28
80
|
|
29
81
|
EOS
|
data/test/basictest.rb
CHANGED
@@ -14,6 +14,16 @@ def array
|
|
14
14
|
end
|
15
15
|
p array
|
16
16
|
|
17
|
+
def array2
|
18
|
+
b = 3
|
19
|
+
a = [3, b, 6]
|
20
|
+
p a
|
21
|
+
a[1] = 1
|
22
|
+
p a
|
23
|
+
[1, 2, 2 * 3][0] + [1 * 2, 2 * 4, 3][1]
|
24
|
+
end
|
25
|
+
p array2
|
26
|
+
|
17
27
|
def fib(x)
|
18
28
|
if x < 2 then
|
19
29
|
1
|
@@ -144,3 +154,26 @@ end
|
|
144
154
|
|
145
155
|
test_while
|
146
156
|
|
157
|
+
i = 5
|
158
|
+
a = i..7
|
159
|
+
p a.first
|
160
|
+
p a.last
|
161
|
+
p a
|
162
|
+
p Range.new(i, 2, false)
|
163
|
+
p 1...3
|
164
|
+
=begin
|
165
|
+
def id(a, *b)
|
166
|
+
p a
|
167
|
+
end
|
168
|
+
id(*[1, 2, 3])
|
169
|
+
|
170
|
+
=begin
|
171
|
+
for i in 1..2
|
172
|
+
p i
|
173
|
+
end
|
174
|
+
|
175
|
+
for i in 1...2
|
176
|
+
p i
|
177
|
+
end
|
178
|
+
|
179
|
+
=end
|
data/test/classtest.rb
CHANGED
data/test/ivtest.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
DAYS_PER_YEAR = 365.24
|
2
|
+
|
3
|
+
class Foo
|
4
|
+
def initialize(x)
|
5
|
+
@a = x * DAYS_PER_YEAR
|
6
|
+
@b = 10.0
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_accessor :a, :b
|
10
|
+
|
11
|
+
def mov(bodies)
|
12
|
+
# bodies[0].a += @a
|
13
|
+
p bodies[0].a
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
foo = Foo.new(1.4)
|
18
|
+
foo.mov([Foo.new(2.8)])
|
19
|
+
p [Foo.new(2.8)][0]
|
data/test/looptest.rb
CHANGED
data/test/macrotest.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
def myattr(*x)
|
2
|
+
str = ""
|
3
|
+
x.each do |e|
|
4
|
+
eval "def #{e}; @#{e}; end\n"
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
myattr :foo, :bar
|
9
|
+
|
10
|
+
# Can't psss this test yet
|
11
|
+
=begin
|
12
|
+
|
13
|
+
def fact(x)
|
14
|
+
if x == 0 then
|
15
|
+
1
|
16
|
+
else
|
17
|
+
x * fact(x - 1)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def fact_inline(x)
|
22
|
+
eval fact(x)
|
23
|
+
end
|
24
|
+
|
25
|
+
p fact_inline(5)
|
26
|
+
=end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Hideki Miura
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date:
|
17
|
+
date: 2011-01-26 00:00:00 +09:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -28,8 +28,8 @@ dependencies:
|
|
28
28
|
segments:
|
29
29
|
- 0
|
30
30
|
- 0
|
31
|
-
-
|
32
|
-
version: 0.0.
|
31
|
+
- 6
|
32
|
+
version: 0.0.6
|
33
33
|
type: :runtime
|
34
34
|
version_requirements: *id001
|
35
35
|
description:
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- lib/ytl.rb
|
45
45
|
- lib/ytl/accmem.rb
|
46
46
|
- lib/ytl/importobj.rb
|
47
|
+
- lib/ytl/macro.rb
|
47
48
|
- runtime/prelude.rb
|
48
49
|
- runtime/type.rb
|
49
50
|
- test/basictest.rb
|
@@ -51,7 +52,9 @@ files:
|
|
51
52
|
- test/exceptiontest.rb
|
52
53
|
- test/exttest.rb
|
53
54
|
- test/floattest.rb
|
55
|
+
- test/ivtest.rb
|
54
56
|
- test/looptest.rb
|
57
|
+
- test/macrotest.rb
|
55
58
|
- test/tmp.rb
|
56
59
|
- bin/ytl
|
57
60
|
- README
|
@@ -93,5 +96,7 @@ test_files:
|
|
93
96
|
- test/exceptiontest.rb
|
94
97
|
- test/exttest.rb
|
95
98
|
- test/floattest.rb
|
99
|
+
- test/ivtest.rb
|
96
100
|
- test/looptest.rb
|
101
|
+
- test/macrotest.rb
|
97
102
|
- test/tmp.rb
|