Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

start small stdlib

  • Loading branch information...
commit 0c20e251523f3f02bd7863e2809e1c19ba2dcafb 1 parent 7108d1b
Josep M. Bach authored
3  Makefile
@@ -30,6 +30,9 @@ kernel: rubinius
30 30 examples: rubinius
31 31 rm -rf `find examples -name "*.tvm" -print`
32 32 cd compiler && rake examples
  33 +lib: rubinius
  34 + rm -rf `find lib -name "*.tvm" -print`
  35 + cd compiler && rake stdlib
33 36
34 37 $(TARGET): CFLAGS += -fPIC -fblocks $(LIBS)
35 38 $(TARGET): build $(OBJECTS)
9 compiler/Rakefile
@@ -23,4 +23,13 @@ task :examples do
23 23 end
24 24 end
25 25
  26 +desc 'Compiles standard library'
  27 +task :stdlib do
  28 + Dir['stdlib/*.rb'].each do |src|
  29 + dest = "../#{src.gsub('rb','tvm').gsub('std','')}"
  30 + puts "Compiling #{src} to #{dest}..."
  31 + `bin/terror #{src} > #{dest}`
  32 + end
  33 +end
  34 +
26 35 task :default => :test
5 compiler/kernel/alpha.rb
... ... @@ -1,5 +1,8 @@
1 1 # The alpha prelude wires up all the primitives to the types.
2 2
  3 +VM.types[:object][:or] = VM.primitives[:or]
  4 +VM.types[:object][:==] = VM.primitives[:equals]
  5 +VM.types[:object][:===] = VM.primitives[:is]
3 6 VM.types[:object].clone = VM.primitives[:clone]
4 7 VM.types[:object].print = VM.primitives[:print]
5 8 VM.types[:object].puts = VM.primitives[:puts]
@@ -16,3 +19,5 @@
16 19 VM.types[:vector].to_map = VM.primitives[:vector_to_map]
17 20 VM.types[:vector].each = VM.primitives[:vector_each]
18 21 VM.types[:vector].each_with_index = VM.primitives[:vector_each_with_index]
  22 +
  23 +VM.types[:map].each = VM.primitives[:map_each]
4 compiler/lib/terror/branching.rb
@@ -28,6 +28,10 @@ def to_i
28 28 def ==(other)
29 29 to_i == other.to_i
30 30 end
  31 +
  32 + def to_s
  33 + to_i.to_s
  34 + end
31 35 end
32 36
33 37 def new_label
17 compiler/lib/terror/visitor.rb
@@ -137,6 +137,17 @@ def attribute_assignment(node, parent)
137 137 g.setslot attribute_name
138 138 end
139 139
  140 + def constant_assignment(node, parent)
  141 + receiver_name = :self
  142 + attribute_name = node.constant.name.to_sym
  143 + @slots[receiver_name] ||= []
  144 + @slots[receiver_name] << attribute_name
  145 +
  146 + g.pushself
  147 + node.value.lazy_visit self
  148 + g.setslot attribute_name
  149 + end
  150 +
140 151 def element_assignment(node, parent)
141 152 receiver_name = if node.receiver.is_a?(Rubinius::AST::Self)
142 153 :self
@@ -181,6 +192,12 @@ def constant_access(node, parent)
181 192 g.getslot node.name
182 193 end
183 194
  195 + def or(node, parent)
  196 + node.left.lazy_visit self
  197 + node.right.lazy_visit self
  198 + g.send_message :or, 1
  199 + end
  200 +
184 201 def finalize(name)
185 202 out = g.encode(name)
186 203 fns = @fns.map { |fn| fn.finalize(fn.name) }
48 compiler/stdlib/test_case.rb
... ... @@ -0,0 +1,48 @@
  1 +TestCase = {}
  2 +
  3 +TestCase.setup = -> {}
  4 +TestCase.teardown = -> {}
  5 +
  6 +TestCase.assert = {
  7 + equal: -> exp, act, msg {
  8 + if !msg
  9 + msg = "Expected " + act.to_s + " to equal " + exp.to_s
  10 + end
  11 + if exp == act
  12 + true
  13 + else
  14 + self.failures.push msg
  15 + false
  16 + end
  17 + }
  18 +}
  19 +
  20 +TestCase.run = -> {
  21 + tests = []
  22 + failures = []
  23 + self.each(-> k, v {
  24 + unless (k == 'setup' || k == 'teardown')
  25 + tests.push k
  26 +
  27 + setup()
  28 + result = v.apply(assert)
  29 + teardown()
  30 +
  31 + if result
  32 + print "\e[32m.\e[0m"
  33 + else
  34 + failures.push k
  35 + print "\e[31mF\e[0m"
  36 + end
  37 + end
  38 + })
  39 +}
  40 +
  41 +mycase = TestCase.clone
  42 +mycase.test_foo = -> assert {
  43 + assert.equal 2 == 2
  44 +}
  45 +mycase.test_bar = -> assert {
  46 + assert.equal 2 == 3
  47 +}
  48 +mycase.run
157 kernel/alpha.tvm
... ... @@ -1,10 +1,15 @@
1 1 _main
2   -:29:314
  2 +:36:410
3 3 "VM
4 4 "types
5 5 "object
6 6 "[]
7 7 "primitives
  8 +"or
  9 +"equals
  10 +"==
  11 +"is
  12 +"===
8 13 "clone
9 14 "print
10 15 "puts
@@ -29,6 +34,8 @@ _main
29 34 "each
30 35 "vector_each_with_index
31 36 "each_with_index
  37 +"map
  38 +"map_each
32 39 16 PUSHSELF
33 40 64 GETSLOT
34 41 0
@@ -76,7 +83,7 @@ _main
76 83 3
77 84 1
78 85 65 SETSLOT
79   -6
  86 +7
80 87 16 PUSHSELF
81 88 64 GETSLOT
82 89 0
@@ -95,12 +102,12 @@ _main
95 102 4
96 103 0
97 104 17 PUSH
98   -7
  105 +8
99 106 128 SEND
100 107 3
101 108 1
102 109 65 SETSLOT
103   -7
  110 +9
104 111 16 PUSHSELF
105 112 64 GETSLOT
106 113 0
@@ -108,7 +115,7 @@ _main
108 115 1
109 116 0
110 117 17 PUSH
111   -8
  118 +2
112 119 128 SEND
113 120 3
114 121 1
@@ -119,7 +126,7 @@ _main
119 126 4
120 127 0
121 128 17 PUSH
122   -9
  129 +10
123 130 128 SEND
124 131 3
125 132 1
@@ -132,7 +139,7 @@ _main
132 139 1
133 140 0
134 141 17 PUSH
135   -8
  142 +2
136 143 128 SEND
137 144 3
138 145 1
@@ -148,7 +155,7 @@ _main
148 155 3
149 156 1
150 157 65 SETSLOT
151   -12
  158 +11
152 159 16 PUSHSELF
153 160 64 GETSLOT
154 161 0
@@ -156,7 +163,7 @@ _main
156 163 1
157 164 0
158 165 17 PUSH
159   -8
  166 +2
160 167 128 SEND
161 168 3
162 169 1
@@ -167,12 +174,12 @@ _main
167 174 4
168 175 0
169 176 17 PUSH
170   -13
  177 +12
171 178 128 SEND
172 179 3
173 180 1
174 181 65 SETSLOT
175   -14
  182 +12
176 183 16 PUSHSELF
177 184 64 GETSLOT
178 185 0
@@ -180,7 +187,7 @@ _main
180 187 1
181 188 0
182 189 17 PUSH
183   -8
  190 +13
184 191 128 SEND
185 192 3
186 193 1
@@ -191,12 +198,12 @@ _main
191 198 4
192 199 0
193 200 17 PUSH
194   -15
  201 +14
195 202 128 SEND
196 203 3
197 204 1
198 205 65 SETSLOT
199   -16
  206 +15
200 207 16 PUSHSELF
201 208 64 GETSLOT
202 209 0
@@ -204,7 +211,31 @@ _main
204 211 1
205 212 0
206 213 17 PUSH
  214 +13
  215 +128 SEND
  216 +3
  217 +1
  218 +16 PUSHSELF
  219 +64 GETSLOT
  220 +0
  221 +128 SEND
  222 +4
  223 +0
  224 +17 PUSH
  225 +16
  226 +128 SEND
  227 +3
  228 +1
  229 +65 SETSLOT
207 230 17
  231 +16 PUSHSELF
  232 +64 GETSLOT
  233 +0
  234 +128 SEND
  235 +1
  236 +0
  237 +17 PUSH
  238 +13
208 239 128 SEND
209 240 3
210 241 1
@@ -220,7 +251,7 @@ _main
220 251 3
221 252 1
222 253 65 SETSLOT
223   -10
  254 +19
224 255 16 PUSHSELF
225 256 64 GETSLOT
226 257 0
@@ -228,7 +259,7 @@ _main
228 259 1
229 260 0
230 261 17 PUSH
231   -19
  262 +13
232 263 128 SEND
233 264 3
234 265 1
@@ -244,6 +275,54 @@ _main
244 275 3
245 276 1
246 277 65 SETSLOT
  278 +21
  279 +16 PUSHSELF
  280 +64 GETSLOT
  281 +0
  282 +128 SEND
  283 +1
  284 +0
  285 +17 PUSH
  286 +22
  287 +128 SEND
  288 +3
  289 +1
  290 +16 PUSHSELF
  291 +64 GETSLOT
  292 +0
  293 +128 SEND
  294 +4
  295 +0
  296 +17 PUSH
  297 +23
  298 +128 SEND
  299 +3
  300 +1
  301 +65 SETSLOT
  302 +15
  303 +16 PUSHSELF
  304 +64 GETSLOT
  305 +0
  306 +128 SEND
  307 +1
  308 +0
  309 +17 PUSH
  310 +24
  311 +128 SEND
  312 +3
  313 +1
  314 +16 PUSHSELF
  315 +64 GETSLOT
  316 +0
  317 +128 SEND
  318 +4
  319 +0
  320 +17 PUSH
  321 +25
  322 +128 SEND
  323 +3
  324 +1
  325 +65 SETSLOT
247 326 3
248 327 16 PUSHSELF
249 328 64 GETSLOT
@@ -252,7 +331,7 @@ _main
252 331 1
253 332 0
254 333 17 PUSH
255   -19
  334 +24
256 335 128 SEND
257 336 3
258 337 1
@@ -263,12 +342,12 @@ _main
263 342 4
264 343 0
265 344 17 PUSH
266   -21
  345 +26
267 346 128 SEND
268 347 3
269 348 1
270 349 65 SETSLOT
271   -22
  350 +27
272 351 16 PUSHSELF
273 352 64 GETSLOT
274 353 0
@@ -276,7 +355,7 @@ _main
276 355 1
277 356 0
278 357 17 PUSH
279   -19
  358 +24
280 359 128 SEND
281 360 3
282 361 1
@@ -287,12 +366,36 @@ _main
287 366 4
288 367 0
289 368 17 PUSH
290   -23
  369 +28
291 370 128 SEND
292 371 3
293 372 1
294 373 65 SETSLOT
  374 +29
  375 +16 PUSHSELF
  376 +64 GETSLOT
  377 +0
  378 +128 SEND
  379 +1
  380 +0
  381 +17 PUSH
295 382 24
  383 +128 SEND
  384 +3
  385 +1
  386 +16 PUSHSELF
  387 +64 GETSLOT
  388 +0
  389 +128 SEND
  390 +4
  391 +0
  392 +17 PUSH
  393 +30
  394 +128 SEND
  395 +3
  396 +1
  397 +65 SETSLOT
  398 +31
296 399 16 PUSHSELF
297 400 64 GETSLOT
298 401 0
@@ -300,7 +403,7 @@ _main
300 403 1
301 404 0
302 405 17 PUSH
303   -19
  406 +24
304 407 128 SEND
305 408 3
306 409 1
@@ -311,12 +414,12 @@ _main
311 414 4
312 415 0
313 416 17 PUSH
314   -25
  417 +32
315 418 128 SEND
316 419 3
317 420 1
318 421 65 SETSLOT
319   -26
  422 +33
320 423 16 PUSHSELF
321 424 64 GETSLOT
322 425 0
@@ -324,7 +427,7 @@ _main
324 427 1
325 428 0
326 429 17 PUSH
327   -19
  430 +34
328 431 128 SEND
329 432 3
330 433 1
@@ -335,12 +438,12 @@ _main
335 438 4
336 439 0
337 440 17 PUSH
338   -27
  441 +35
339 442 128 SEND
340 443 3
341 444 1
342 445 65 SETSLOT
343   -28
  446 +31
344 447 20 PUSHNIL
345 448 144 RET
346 449
8 kernel/beta.tvm
@@ -4,7 +4,7 @@ _main
4 4 "types
5 5 "vector
6 6 "[]
7   -"block_3319debf35b52bc1dc4372eb64231136
  7 +"block_a5862e4840a9030325ee899247daba42
8 8 "map
9 9 16 PUSHSELF
10 10 64 GETSLOT
@@ -23,9 +23,9 @@ _main
23 23 5
24 24 20 PUSHNIL
25 25 144 RET
26   -_block_3319debf35b52bc1dc4372eb64231136
  26 +_block_a5862e4840a9030325ee899247daba42
27 27 :2:15
28   -"block_9eb07e8a6f0594c80cada6d95bb425fe
  28 +"block_dff6e20e54501570489fe3ab5019e9db
29 29 "each
30 30 68 MAKEVEC
31 31 0
@@ -42,7 +42,7 @@ _block_3319debf35b52bc1dc4372eb64231136
42 42 1
43 43 0
44 44 144 RET
45   -_block_9eb07e8a6f0594c80cada6d95bb425fe
  45 +_block_dff6e20e54501570489fe3ab5019e9db
46 46 :2:15
47 47 "apply
48 48 "push
313 lib/test_case.tvm
... ... @@ -0,0 +1,313 @@
  1 +_main
  2 +:16:70
  3 +"to_map
  4 +"TestCase
  5 +"block_784b66bca6bda2398c2b1621a6e44da8
  6 +"setup
  7 +"block_74b39fc90ce4787b4c659fe8bd691f14
  8 +"teardown
  9 +"block_61b4e58e1c99f68147cce25052bb9f43
  10 +"equal
  11 +"assert
  12 +"block_f53393e482b8e441e8dcec197ee2aac0
  13 +"run
  14 +"clone
  15 +"block_2d54cabecc74f8329ee8fcc6ad538567
  16 +"test_foo
  17 +"block_f12b8abfb5b18f592e668fa0db9b266c
  18 +"test_bar
  19 +16 PUSHSELF
  20 +68 MAKEVEC
  21 +0
  22 +128 SEND
  23 +0
  24 +0
  25 +65 SETSLOT
  26 +1
  27 +16 PUSHSELF
  28 +64 GETSLOT
  29 +1
  30 +67 DEFN
  31 +2
  32 +65 SETSLOT
  33 +3
  34 +16 PUSHSELF
  35 +64 GETSLOT
  36 +1
  37 +67 DEFN
  38 +4
  39 +65 SETSLOT
  40 +5
  41 +16 PUSHSELF
  42 +64 GETSLOT
  43 +1
  44 +67 DEFN
  45 +6
  46 +17 PUSH
  47 +7
  48 +68 MAKEVEC
  49 +2
  50 +128 SEND
  51 +0
  52 +0
  53 +65 SETSLOT
  54 +8
  55 +16 PUSHSELF
  56 +64 GETSLOT
  57 +1
  58 +67 DEFN
  59 +9
  60 +65 SETSLOT
  61 +10
  62 +16 PUSHSELF
  63 +64 GETSLOT
  64 +1
  65 +128 SEND
  66 +11
  67 +0
  68 +33 SETLOCAL
  69 +3
  70 +32 PUSHLOCAL
  71 +3
  72 +67 DEFN
  73 +12
  74 +65 SETSLOT
  75 +13
  76 +32 PUSHLOCAL
  77 +3
  78 +67 DEFN
  79 +14
  80 +65 SETSLOT
  81 +15
  82 +32 PUSHLOCAL
  83 +3
  84 +128 SEND
  85 +10
  86 +0
  87 +20 PUSHNIL
  88 +144 RET
  89 +_block_784b66bca6bda2398c2b1621a6e44da8
  90 +:0:2
  91 +20 PUSHNIL
  92 +144 RET
  93 +_block_74b39fc90ce4787b4c659fe8bd691f14
  94 +:0:2
  95 +20 PUSHNIL
  96 +144 RET
  97 +_block_61b4e58e1c99f68147cce25052bb9f43
  98 +:8:58
  99 +"!
  100 +"Expected
  101 +"to_s
  102 +"+
  103 +" to equal
  104 +"==
  105 +"failures
  106 +"push
  107 +32 PUSHLOCAL
  108 +2
  109 +128 SEND
  110 +0
  111 +0
  112 +49 JIF
  113 +12
  114 +17 PUSH
  115 +1
  116 +32 PUSHLOCAL
  117 +1
  118 +128 SEND
  119 +2
  120 +0
  121 +128 SEND
  122 +3
  123 +1
  124 +17 PUSH
  125 +4
  126 +128 SEND
  127 +3
  128 +1
  129 +32 PUSHLOCAL
  130 +0
  131 +128 SEND
  132 +2
  133 +0
  134 +128 SEND
  135 +3
  136 +1
  137 +33 SETLOCAL
  138 +2
  139 +48 JMP
  140 +2
  141 +20 PUSHNIL
  142 +32 PUSHLOCAL
  143 +0
  144 +32 PUSHLOCAL
  145 +1
  146 +128 SEND
  147 +5
  148 +1
  149 +49 JIF
  150 +3
  151 +18 PUSHTRUE
  152 +48 JMP
  153 +6
  154 +16 PUSHSELF
  155 +128 SEND
  156 +6
  157 +0
  158 +32 PUSHLOCAL
  159 +2
  160 +128 SEND
  161 +7
  162 +1
  163 +19 PUSHFALSE
  164 +144 RET
  165 +_block_f53393e482b8e441e8dcec197ee2aac0
  166 +:2:17
  167 +"block_386218d2d4e3cbf580b8bffb3f0ebe4d
  168 +"each
  169 +68 MAKEVEC
  170 +0
  171 +35 SETLOCALDEPTH
  172 +1
  173 +0
  174 +68 MAKEVEC
  175 +0
  176 +35 SETLOCALDEPTH
  177 +1
  178 +1
  179 +16 PUSHSELF
  180 +67 DEFN
  181 +0
  182 +128 SEND
  183 +1
  184 +1
  185 +144 RET
  186 +_block_386218d2d4e3cbf580b8bffb3f0ebe4d
  187 +:10:78
  188 +"setup
  189 +"==
  190 +"teardown
  191 +"or
  192 +"push
  193 +"assert
  194 +"apply
  195 +".
  196 +"print
  197 +"F
  198 +32 PUSHLOCAL
  199 +0
  200 +17 PUSH
  201 +0
  202 +128 SEND
  203 +1
  204 +1
  205 +32 PUSHLOCAL
  206 +0
  207 +17 PUSH
  208 +2
  209 +128 SEND
  210 +1
  211 +1
  212 +128 SEND
  213 +3
  214 +1
  215 +49 JIF
  216 +3
  217 +20 PUSHNIL
  218 +48 JMP
  219 +25
  220 +34 PUSHLOCALDEPTH
  221 +2
  222 +0
  223 +32 PUSHLOCAL
  224 +0
  225 +128 SEND
  226 +4
  227 +1
  228 +16 PUSHSELF
  229 +128 SEND
  230 +0
  231 +0
  232 +32 PUSHLOCAL
  233 +1
  234 +16 PUSHSELF
  235 +128 SEND
  236 +5
  237 +0
  238 +128 SEND
  239 +6
  240 +1
  241 +35 SETLOCALDEPTH
  242 +2
  243 +2
  244 +16 PUSHSELF
  245 +128 SEND
  246 +2
  247 +0
  248 +34 PUSHLOCALDEPTH
  249 +2
  250 +2
  251 +49 JIF
  252 +5
  253 +16 PUSHSELF
  254 +17 PUSH
  255 +7
  256 +128 SEND
  257 +8
  258 +1
  259 +48 JMP
  260 +7
  261 +34 PUSHLOCALDEPTH
  262 +2
  263 +1
  264 +32 PUSHLOCAL
  265 +0
  266 +128 SEND
  267 +4
  268 +1
  269 +16 PUSHSELF
  270 +17 PUSH
  271 +9
  272 +128 SEND
  273 +8
  274 +1
  275 +144 RET
  276 +_block_2d54cabecc74f8329ee8fcc6ad538567
  277 +:3:13
  278 +2
  279 +"==
  280 +"equal
  281 +32 PUSHLOCAL
  282 +0
  283 +17 PUSH
  284 +0
  285 +17 PUSH
  286 +0
  287 +128 SEND
  288 +1
  289 +1
  290 +128 SEND
  291 +2
  292 +1
  293 +144 RET
  294 +_block_f12b8abfb5b18f592e668fa0db9b266c
  295 +:4:13
  296 +2
  297 +3
  298 +"==
  299 +"equal
  300 +32 PUSHLOCAL
  301 +0
  302 +17 PUSH
  303 +0
  304 +17 PUSH
  305 +1
  306 +128 SEND
  307 +2
  308 +1
  309 +128 SEND
  310 +3
  311 +1
  312 +144 RET
  313 +
6 src/terror/bootstrap.c
@@ -42,6 +42,9 @@ expose_VM(VALUE lobby)
42 42 DArray *primitives = DArray_create(sizeof(VALUE), 10);
43 43
44 44 // Object
  45 + DEFPRIM(primitives, "or", Primitive_or);
  46 + DEFPRIM(primitives, "equals", Primitive_equals);
  47 + DEFPRIM(primitives, "is", Primitive_is);
45 48 DEFPRIM(primitives, "print", Primitive_print);
46 49 DEFPRIM(primitives, "puts", Primitive_puts);
47 50 DEFPRIM(primitives, "require", Primitive_require);
@@ -63,6 +66,9 @@ expose_VM(VALUE lobby)
63 66 // String
64 67 DEFPRIM(primitives, "string_+", Primitive_String_concat);
65 68
  69 + // Map
  70 + DEFPRIM(primitives, "map_each", Primitive_Map_each);
  71 +
66 72 Value_set(vm, "primitives", Map_new(primitives));
67 73
68 74 // VM.types map
33 src/terror/primitives.c
@@ -5,6 +5,7 @@
5 5 #include <terror/call_frame.h>
6 6 #include <terror/input_reader.h>
7 7 #include <terror/vector.h>
  8 +#include <terror/map.h>
8 9 #include <terror/vm.h>
9 10 #include <assert.h>
10 11
@@ -13,6 +14,18 @@
13 14 */
14 15
15 16 VALUE
  17 +Primitive_or(STATE, void *a, void *b, void *__)
  18 +{
  19 + VALUE self = (VALUE)a;
  20 + VALUE other = (VALUE)b;
  21 +
  22 + if(self == NilObject || self == FalseObject) return FalseObject;
  23 + if(other == NilObject || other == FalseObject) return FalseObject;
  24 +
  25 + return TrueObject;
  26 +}
  27 +
  28 +VALUE
16 29 Primitive_equals(STATE, void *a, void *b, void *__)
17 30 {
18 31 VALUE self = (VALUE)a;
@@ -315,3 +328,23 @@ Primitive_Map_set(STATE, void *a, void *b, void *c)
315 328 return value;
316 329 }
317 330
  331 +VALUE
  332 +Primitive_Map_each(STATE, void *a, void *b, void *_)
  333 +{
  334 + VALUE map = (VALUE)a;
  335 + VALUE closure = (VALUE)b;
  336 +
  337 + CHECK_PRESENCE(map);
  338 + CHECK_TYPE(closure, ClosureType);
  339 +
  340 + Map_each(map, ^ void (bstring key, VALUE value) {
  341 + DArray *args = DArray_create(sizeof(VALUE), 10);
  342 + DArray_push(args, String_new(bdata(key)));
  343 + DArray_push(args, value);
  344 +
  345 + Closure_invoke(state, closure, NULL, args);
  346 + });
  347 +
  348 + return map;
  349 +}
  350 +
2  src/terror/primitives.h
@@ -10,6 +10,7 @@
10 10
11 11 #define PRIMITIVE_ARGS STATE, void*, void*, void*
12 12 // Generic primitive methods
  13 +VALUE Primitive_or(PRIMITIVE_ARGS);
13 14 VALUE Primitive_equals(PRIMITIVE_ARGS);
14 15 VALUE Primitive_is(PRIMITIVE_ARGS);
15 16 VALUE Primitive_clone(PRIMITIVE_ARGS);
@@ -36,5 +37,6 @@ VALUE Primitive_Vector_each_with_index(PRIMITIVE_ARGS);
36 37 // Map primitive methods
37 38 VALUE Primitive_Map_get(PRIMITIVE_ARGS);
38 39 VALUE Primitive_Map_set(PRIMITIVE_ARGS);
  40 +VALUE Primitive_Map_each(PRIMITIVE_ARGS);
39 41
40 42 #endif

0 comments on commit 0c20e25

Please sign in to comment.
Something went wrong with that request. Please try again.