rubex 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/CONTRIBUTING.md +73 -9
  4. data/HISTORY.md +19 -0
  5. data/README.md +53 -8
  6. data/REFERENCE.md +112 -44
  7. data/benchmarks/no_gil/no_gil.rb +24 -0
  8. data/benchmarks/no_gil/no_gil.rubex +22 -0
  9. data/bin/rubex +1 -1
  10. data/examples/c_struct_interface/c_struct_interface.rubex +1 -0
  11. data/lib/rubex.rb +1 -0
  12. data/lib/rubex/ast.rb +11 -7
  13. data/lib/rubex/ast/expression.rb +1 -1
  14. data/lib/rubex/ast/expression/actual_arg_list.rb +7 -0
  15. data/lib/rubex/ast/expression/analysed_element_ref/c_var_element_ref.rb +5 -2
  16. data/lib/rubex/ast/expression/analysed_element_ref/ruby_object_element_ref.rb +26 -9
  17. data/lib/rubex/ast/expression/binary/binary_boolean.rb +1 -1
  18. data/lib/rubex/ast/expression/binary/binary_expo.rb +34 -0
  19. data/lib/rubex/ast/expression/binary/colon2.rb +34 -0
  20. data/lib/rubex/ast/expression/binary/empty_classes.rb +0 -3
  21. data/lib/rubex/ast/expression/command_call.rb +24 -0
  22. data/lib/rubex/ast/{statement → expression/command_call}/print.rb +4 -5
  23. data/lib/rubex/ast/{statement → expression/command_call}/raise.rb +29 -24
  24. data/lib/rubex/ast/expression/command_call/require.rb +27 -0
  25. data/lib/rubex/ast/expression/command_call/yield.rb +36 -0
  26. data/lib/rubex/ast/expression/element_ref.rb +10 -5
  27. data/lib/rubex/ast/expression/instance_var.rb +33 -0
  28. data/lib/rubex/ast/expression/method_call.rb +4 -2
  29. data/lib/rubex/ast/expression/method_call/c_function_call.rb +4 -3
  30. data/lib/rubex/ast/expression/method_call/ruby_method_call.rb +7 -5
  31. data/lib/rubex/ast/expression/name.rb +10 -1
  32. data/lib/rubex/ast/expression/ruby_object_element_ref/ruby_array_element_ref.rb +5 -2
  33. data/lib/rubex/ast/expression/ruby_object_element_ref/ruby_hash_element_ref.rb +10 -2
  34. data/lib/rubex/ast/expression/to_ruby_object.rb +1 -0
  35. data/lib/rubex/ast/expression/unary.rb +7 -3
  36. data/lib/rubex/ast/expression/unary_base/ampersand.rb +5 -0
  37. data/lib/rubex/ast/node.rb +213 -185
  38. data/lib/rubex/ast/node/file_node.rb +25 -0
  39. data/lib/rubex/ast/node/main_node.rb +56 -0
  40. data/lib/rubex/ast/statement/begin_block/begin.rb +4 -3
  41. data/lib/rubex/ast/statement/c_array_decl.rb +1 -1
  42. data/lib/rubex/ast/statement/c_ptr_decl.rb +2 -0
  43. data/lib/rubex/ast/statement/no_gil_block.rb +70 -0
  44. data/lib/rubex/ast/statement/return.rb +1 -0
  45. data/lib/rubex/ast/top_statement.rb +1 -1
  46. data/lib/rubex/ast/top_statement/klass.rb +4 -0
  47. data/lib/rubex/ast/top_statement/klass/attached_klass.rb +88 -10
  48. data/lib/rubex/ast/top_statement/method_def.rb +2 -3
  49. data/lib/rubex/ast/top_statement/method_def/c_function_def.rb +10 -4
  50. data/lib/rubex/cli.rb +11 -6
  51. data/lib/rubex/code_supervisor.rb +49 -0
  52. data/lib/rubex/code_writer.rb +22 -1
  53. data/lib/rubex/compiler.rb +109 -30
  54. data/lib/rubex/compiler_config.rb +14 -1
  55. data/lib/rubex/constants.rb +3 -0
  56. data/lib/rubex/data_type.rb +2 -3
  57. data/lib/rubex/data_type/ruby_object/ruby_symbol.rb +0 -1
  58. data/lib/rubex/error.rb +4 -0
  59. data/lib/rubex/helpers/writers.rb +33 -4
  60. data/lib/rubex/lexer.rex +9 -1
  61. data/lib/rubex/lexer.rex.rb +15 -2
  62. data/lib/rubex/parser.racc +125 -49
  63. data/lib/rubex/parser.racc.rb +1526 -1376
  64. data/lib/rubex/rake_task.rb +42 -6
  65. data/lib/rubex/symbol_table/entry.rb +6 -0
  66. data/lib/rubex/symbol_table/scope.rb +28 -3
  67. data/lib/rubex/version.rb +1 -1
  68. data/rubex.gemspec +1 -0
  69. data/spec/basic_ruby_method_spec.rb +2 -2
  70. data/spec/blocks_spec.rb +2 -2
  71. data/spec/box_op_multi_args_spec.rb +34 -0
  72. data/spec/c_function_ptrs_spec.rb +2 -2
  73. data/spec/c_functions_spec.rb +2 -0
  74. data/spec/c_struct_interface_spec.rb +8 -3
  75. data/spec/default_args_spec.rb +2 -2
  76. data/spec/external_c_struct_spec.rb +33 -0
  77. data/spec/fixtures/api/consumer.rubex +0 -0
  78. data/spec/fixtures/api/implementation.rubex +0 -0
  79. data/spec/fixtures/api/implementation.rubexd +0 -0
  80. data/spec/fixtures/box_op_multi_args/box_op_multi_args.rubex +3 -0
  81. data/spec/fixtures/c_functions/c_functions.rubex +13 -0
  82. data/spec/fixtures/c_struct_interface/c_struct_interface.rubex +28 -0
  83. data/spec/fixtures/class_methods/class_methods.rubex +1 -1
  84. data/spec/fixtures/error_handling/error_handling.rubex +2 -2
  85. data/spec/fixtures/external_c_struct/external_c_struct.rubex +16 -0
  86. data/spec/fixtures/if_else/if_else.rubex +1 -1
  87. data/spec/fixtures/init_ruby_objects_with_literal_syntax/init_ruby_objects_with_literal_syntax.rubex +1 -1
  88. data/spec/fixtures/instance_variables/instance_variables.rubex +25 -0
  89. data/spec/fixtures/loops/loops.rubex +2 -2
  90. data/spec/fixtures/module/module.rubex +28 -0
  91. data/spec/fixtures/multi_file_programs/Rakefile +8 -0
  92. data/spec/fixtures/multi_file_programs/a.rubex +5 -0
  93. data/spec/fixtures/multi_file_programs/b.rubex +5 -0
  94. data/spec/fixtures/multi_file_programs/multi_file_programs.rubex +14 -0
  95. data/spec/fixtures/no_gil/no_gil.rubex +24 -0
  96. data/spec/fixtures/no_gil_attach_class/no_gil_attach_class.rubex +23 -0
  97. data/spec/fixtures/no_gil_compile_check/no_gil_compile_check.rubex +4 -0
  98. data/spec/fixtures/outside_stmts/outside_stmts.rubex +6 -0
  99. data/spec/fixtures/pow/pow.rubex +4 -0
  100. data/spec/fixtures/rake_task/single_file/test.rubex +3 -0
  101. data/spec/fixtures/recursion/recursion.rubex +1 -1
  102. data/spec/fixtures/ruby_constant_scoping/ruby_constant_scoping.rubex +7 -0
  103. data/spec/fixtures/ruby_operators/ruby_operators.rubex +1 -1
  104. data/spec/fixtures/ruby_raise/ruby_raise.rubex +2 -2
  105. data/spec/fixtures/ruby_types/ruby_types.rubex +4 -4
  106. data/spec/fixtures/statement_expression/statement_expression.rubex +2 -2
  107. data/spec/fixtures/static_array/static_array.rubex +3 -3
  108. data/spec/fixtures/string_literals/string_literals.rubex +12 -2
  109. data/spec/fixtures/struct/struct.rubex +1 -1
  110. data/spec/fixtures/var_declarations/var_declarations.rubex +1 -1
  111. data/spec/implicit_lib_include_spec.rb +2 -2
  112. data/spec/init_ruby_objects_with_literal_syntax_spec.rb +2 -2
  113. data/spec/instance_variables_spec.rb +33 -0
  114. data/spec/loops_spec.rb +2 -2
  115. data/spec/module_spec.rb +39 -0
  116. data/spec/multi_file_programs_spec.rb +41 -0
  117. data/spec/no_gil_attach_class_spec.rb +33 -0
  118. data/spec/no_gil_compile_check_spec.rb +25 -0
  119. data/spec/no_gil_spec.rb +36 -0
  120. data/spec/outside_stmts_spec.rb +34 -0
  121. data/spec/pow_spec.rb +33 -0
  122. data/spec/rake_task_spec.rb +142 -0
  123. data/spec/recursion_spec.rb +4 -4
  124. data/spec/ruby_constant_scoping_spec.rb +42 -0
  125. data/spec/ruby_raise_spec.rb +2 -2
  126. data/spec/ruby_symbols_spec.rb +2 -2
  127. data/spec/ruby_types_spec.rb +2 -2
  128. data/spec/spec_helper.rb +17 -3
  129. data/spec/string_literals_spec.rb +1 -0
  130. metadata +90 -6
  131. data/lib/rubex/ast/statement/yield.rb +0 -41
@@ -14,13 +14,13 @@ describe Rubex do
14
14
  end
15
15
  end
16
16
 
17
- context ".compile", focus: true do
17
+ context ".compile" do
18
18
  it "compiles to valid C file" do
19
19
  t,c,e = Rubex::Compiler.compile(@path + '.rubex', test: true)
20
20
  end
21
21
  end
22
22
 
23
- context "Black box testing", focus: true do
23
+ context "Black box testing" do
24
24
  it "compiles and checks for valid output" do
25
25
  setup_and_teardown_compiled_files(test_case) do |dir|
26
26
  require_relative "#{dir}/#{test_case}.#{os_extension}"
@@ -14,13 +14,13 @@ describe Rubex do
14
14
  end
15
15
  end
16
16
 
17
- context ".compile", focus: true do
17
+ context ".compile" do
18
18
  it "compiles to valid C file" do
19
19
  t,c,e = Rubex::Compiler.compile(@path + '.rubex', test: true)
20
20
  end
21
21
  end
22
22
 
23
- context "Black box testing", focus: true do
23
+ context "Black box testing" do
24
24
  it "compiles and checks for valid output" do
25
25
  setup_and_teardown_compiled_files(test_case) do |dir|
26
26
  require_relative "#{dir}/#{test_case}.#{os_extension}"
@@ -14,13 +14,13 @@ describe Rubex do
14
14
  end
15
15
  end
16
16
 
17
- context ".compile", focus: true do
17
+ context ".compile" do
18
18
  it "compiles to valid C file" do
19
19
  t,c,e = Rubex::Compiler.compile(@path + '.rubex', test: true)
20
20
  end
21
21
  end
22
22
 
23
- context "Black Box testing", focus: true do
23
+ context "Black Box testing" do
24
24
  it "compiles and checks for valid output" do
25
25
  setup_and_teardown_compiled_files(test_case) do |dir|
26
26
  require_relative "#{dir}/#{test_case}.#{os_extension}"
@@ -33,7 +33,7 @@ def generate_shared_object test_case, example=nil
33
33
  path = path_str test_case, example
34
34
  dir = dir_str test_case, example
35
35
 
36
- Rubex::Compiler.compile(path + '.rubex', directory: dir)
36
+ Rubex::Compiler.compile(path + '.rubex', target_dir: dir)
37
37
  Dir.chdir(dir) do
38
38
  `ruby extconf.rb`
39
39
  `make`
@@ -44,7 +44,9 @@ def delete_generated_files test_case, example=nil
44
44
  dir = dir_str test_case, example
45
45
  test_case = example if example
46
46
  Dir.chdir(dir) do
47
- FileUtils.rm(Dir.glob("#{test_case}.{c,so,o,bundle,dll}") + ["Makefile", "extconf.rb"], force: true)
47
+ FileUtils.rm(
48
+ Dir.glob("*.{c,h,so,o,bundle,dll}") + ["Makefile", "extconf.rb"],
49
+ force: true)
48
50
  end
49
51
  end
50
52
 
@@ -58,11 +60,23 @@ def setup_and_teardown_compiled_files test_case, example=nil, &block
58
60
  end
59
61
  end
60
62
 
63
+ def setup_and_teardown_multiple_compiled_files test_case, source_dir, t_dir, files, &block
64
+ Rubex::Compiler.compile(test_case, source_dir: source_dir, files: files,
65
+ target_dir: t_dir, make: true)
66
+ begin
67
+ block.call(t_dir)
68
+ ensure
69
+ Dir.chdir(t_dir) do
70
+ FileUtils.rm(
71
+ Dir.glob("#{t_dir}/*.{c,h,so,o,bundle,dll}") + ["Makefile", "extconf.rb"], force: true)
72
+ end
73
+ end
74
+ end
75
+
61
76
  def expect_compiled_code code, path
62
77
  expect(code.to_s).to eq(File.read(path))
63
78
  end
64
79
 
65
-
66
80
  def detect_os
67
81
  @os ||= (
68
82
  host_os = RbConfig::CONFIG['host_os']
@@ -27,6 +27,7 @@ describe Rubex do
27
27
 
28
28
  expect(strings).to eq("Ted says \"Oh my God thats a big sandwich!\"")
29
29
  expect(string_ret).to eq("This is a returned string.")
30
+ expect(char_literal).to eq(true)
30
31
  end
31
32
  end
32
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sameer Deshmukh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-10 00:00:00.000000000 Z
11
+ date: 2018-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: numo-narray
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
181
195
  description: |
182
196
  A Ruby-like language for writing Ruby C extensions.
183
197
 
@@ -199,6 +213,8 @@ files:
199
213
  - REFERENCE.md
200
214
  - Rakefile
201
215
  - TUTORIAL.md
216
+ - benchmarks/no_gil/no_gil.rb
217
+ - benchmarks/no_gil/no_gil.rubex
202
218
  - bin/rubex
203
219
  - docs/_config.yml
204
220
  - docs/index.html
@@ -233,16 +249,23 @@ files:
233
249
  - lib/rubex/ast/expression/binary.rb
234
250
  - lib/rubex/ast/expression/binary/binary_boolean.rb
235
251
  - lib/rubex/ast/expression/binary/binary_boolean_special_op.rb
252
+ - lib/rubex/ast/expression/binary/binary_expo.rb
253
+ - lib/rubex/ast/expression/binary/colon2.rb
236
254
  - lib/rubex/ast/expression/binary/empty_classes.rb
237
255
  - lib/rubex/ast/expression/block_given.rb
238
256
  - lib/rubex/ast/expression/coerce_object.rb
239
257
  - lib/rubex/ast/expression/command_call.rb
258
+ - lib/rubex/ast/expression/command_call/print.rb
259
+ - lib/rubex/ast/expression/command_call/raise.rb
260
+ - lib/rubex/ast/expression/command_call/require.rb
240
261
  - lib/rubex/ast/expression/command_call/struct_or_union_member_call.rb
262
+ - lib/rubex/ast/expression/command_call/yield.rb
241
263
  - lib/rubex/ast/expression/element_ref.rb
242
264
  - lib/rubex/ast/expression/empty.rb
243
265
  - lib/rubex/ast/expression/from_ruby_object.rb
244
266
  - lib/rubex/ast/expression/func_ptr_arg_declaration.rb
245
267
  - lib/rubex/ast/expression/func_ptr_internal_arg_declaration.rb
268
+ - lib/rubex/ast/expression/instance_var.rb
246
269
  - lib/rubex/ast/expression/literal.rb
247
270
  - lib/rubex/ast/expression/literal/array_lit.rb
248
271
  - lib/rubex/ast/expression/literal/c_null.rb
@@ -275,6 +298,8 @@ files:
275
298
  - lib/rubex/ast/expression/unary_base/unary_not.rb
276
299
  - lib/rubex/ast/expression/unary_base/unary_sub.rb
277
300
  - lib/rubex/ast/node.rb
301
+ - lib/rubex/ast/node/file_node.rb
302
+ - lib/rubex/ast/node/main_node.rb
278
303
  - lib/rubex/ast/statement.rb
279
304
  - lib/rubex/ast/statement/alias.rb
280
305
  - lib/rubex/ast/statement/argument_list.rb
@@ -298,12 +323,10 @@ files:
298
323
  - lib/rubex/ast/statement/if_block/else.rb
299
324
  - lib/rubex/ast/statement/if_block/elsif.rb
300
325
  - lib/rubex/ast/statement/if_block/helper.rb
301
- - lib/rubex/ast/statement/print.rb
302
- - lib/rubex/ast/statement/raise.rb
326
+ - lib/rubex/ast/statement/no_gil_block.rb
303
327
  - lib/rubex/ast/statement/return.rb
304
328
  - lib/rubex/ast/statement/var_decl.rb
305
329
  - lib/rubex/ast/statement/while.rb
306
- - lib/rubex/ast/statement/yield.rb
307
330
  - lib/rubex/ast/top_statement.rb
308
331
  - lib/rubex/ast/top_statement/c_bindings.rb
309
332
  - lib/rubex/ast/top_statement/klass.rb
@@ -312,6 +335,7 @@ files:
312
335
  - lib/rubex/ast/top_statement/method_def/c_function_def.rb
313
336
  - lib/rubex/ast/top_statement/method_def/ruby_method_def.rb
314
337
  - lib/rubex/cli.rb
338
+ - lib/rubex/code_supervisor.rb
315
339
  - lib/rubex/code_writer.rb
316
340
  - lib/rubex/compiler.rb
317
341
  - lib/rubex/compiler_config.rb
@@ -378,6 +402,7 @@ files:
378
402
  - spec/binding_ptr_args_spec.rb
379
403
  - spec/bitwise_operators_spec.rb
380
404
  - spec/blocks_spec.rb
405
+ - spec/box_op_multi_args_spec.rb
381
406
  - spec/c_bindings_spec.rb
382
407
  - spec/c_constants_spec.rb
383
408
  - spec/c_function_ptrs_spec.rb
@@ -392,10 +417,15 @@ files:
392
417
  - spec/error_handling_spec.rb
393
418
  - spec/examples_spec.rb
394
419
  - spec/expressions_spec.rb
420
+ - spec/external_c_struct_spec.rb
421
+ - spec/fixtures/api/consumer.rubex
422
+ - spec/fixtures/api/implementation.rubex
423
+ - spec/fixtures/api/implementation.rubexd
395
424
  - spec/fixtures/basic_ruby_method/basic_ruby_method.rubex
396
425
  - spec/fixtures/binding_ptr_args/binding_ptr_args.rubex
397
426
  - spec/fixtures/bitwise_operators/bitwise_operators.rubex
398
427
  - spec/fixtures/blocks/blocks.rubex
428
+ - spec/fixtures/box_op_multi_args/box_op_multi_args.rubex
399
429
  - spec/fixtures/c_bindings/c_bindings.rubex
400
430
  - spec/fixtures/c_constants/c_constants.rubex
401
431
  - spec/fixtures/c_function_ptrs/c_function_ptrs.rubex
@@ -412,12 +442,26 @@ files:
412
442
  - spec/fixtures/examples/rcsv.csv
413
443
  - spec/fixtures/examples/rcsv.rubex
414
444
  - spec/fixtures/expressions/expressions.rubex
445
+ - spec/fixtures/external_c_struct/external_c_struct.rubex
415
446
  - spec/fixtures/if_else/if_else.rubex
416
447
  - spec/fixtures/implicit_lib_include/implicit_lib_include.rubex
417
448
  - spec/fixtures/init_ruby_objects_with_literal_syntax/init_ruby_objects_with_literal_syntax.rubex
449
+ - spec/fixtures/instance_variables/instance_variables.rubex
418
450
  - spec/fixtures/loops/loops.rubex
451
+ - spec/fixtures/module/module.rubex
452
+ - spec/fixtures/multi_file_programs/Rakefile
453
+ - spec/fixtures/multi_file_programs/a.rubex
454
+ - spec/fixtures/multi_file_programs/b.rubex
455
+ - spec/fixtures/multi_file_programs/multi_file_programs.rubex
456
+ - spec/fixtures/no_gil/no_gil.rubex
457
+ - spec/fixtures/no_gil_attach_class/no_gil_attach_class.rubex
458
+ - spec/fixtures/no_gil_compile_check/no_gil_compile_check.rubex
459
+ - spec/fixtures/outside_stmts/outside_stmts.rubex
460
+ - spec/fixtures/pow/pow.rubex
461
+ - spec/fixtures/rake_task/single_file/test.rubex
419
462
  - spec/fixtures/recursion/recursion.rubex
420
463
  - spec/fixtures/ruby_constant_method_calls/ruby_constant_method_calls.rubex
464
+ - spec/fixtures/ruby_constant_scoping/ruby_constant_scoping.rubex
421
465
  - spec/fixtures/ruby_operators/ruby_operators.rubex
422
466
  - spec/fixtures/ruby_raise/ruby_raise.rubex
423
467
  - spec/fixtures/ruby_strings/ruby_strings.rubex
@@ -434,9 +478,19 @@ files:
434
478
  - spec/if_else_spec.rb
435
479
  - spec/implicit_lib_include_spec.rb
436
480
  - spec/init_ruby_objects_with_literal_syntax_spec.rb
481
+ - spec/instance_variables_spec.rb
437
482
  - spec/loops_spec.rb
483
+ - spec/module_spec.rb
484
+ - spec/multi_file_programs_spec.rb
485
+ - spec/no_gil_attach_class_spec.rb
486
+ - spec/no_gil_compile_check_spec.rb
487
+ - spec/no_gil_spec.rb
488
+ - spec/outside_stmts_spec.rb
489
+ - spec/pow_spec.rb
490
+ - spec/rake_task_spec.rb
438
491
  - spec/recursion_spec.rb
439
492
  - spec/ruby_constant_method_calls_spec.rb
493
+ - spec/ruby_constant_scoping_spec.rb
440
494
  - spec/ruby_operators_spec.rb
441
495
  - spec/ruby_raise_spec.rb
442
496
  - spec/ruby_strings_spec.rb
@@ -470,7 +524,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
470
524
  version: '0'
471
525
  requirements: []
472
526
  rubyforge_project:
473
- rubygems_version: 2.7.4
527
+ rubygems_version: 2.6.14
474
528
  signing_key:
475
529
  specification_version: 4
476
530
  summary: A Ruby-like language for writing Ruby C extensions. Rubex keeps you happy
@@ -480,6 +534,7 @@ test_files:
480
534
  - spec/binding_ptr_args_spec.rb
481
535
  - spec/bitwise_operators_spec.rb
482
536
  - spec/blocks_spec.rb
537
+ - spec/box_op_multi_args_spec.rb
483
538
  - spec/c_bindings_spec.rb
484
539
  - spec/c_constants_spec.rb
485
540
  - spec/c_function_ptrs_spec.rb
@@ -494,10 +549,15 @@ test_files:
494
549
  - spec/error_handling_spec.rb
495
550
  - spec/examples_spec.rb
496
551
  - spec/expressions_spec.rb
552
+ - spec/external_c_struct_spec.rb
553
+ - spec/fixtures/api/consumer.rubex
554
+ - spec/fixtures/api/implementation.rubex
555
+ - spec/fixtures/api/implementation.rubexd
497
556
  - spec/fixtures/basic_ruby_method/basic_ruby_method.rubex
498
557
  - spec/fixtures/binding_ptr_args/binding_ptr_args.rubex
499
558
  - spec/fixtures/bitwise_operators/bitwise_operators.rubex
500
559
  - spec/fixtures/blocks/blocks.rubex
560
+ - spec/fixtures/box_op_multi_args/box_op_multi_args.rubex
501
561
  - spec/fixtures/c_bindings/c_bindings.rubex
502
562
  - spec/fixtures/c_constants/c_constants.rubex
503
563
  - spec/fixtures/c_function_ptrs/c_function_ptrs.rubex
@@ -514,12 +574,26 @@ test_files:
514
574
  - spec/fixtures/examples/rcsv.csv
515
575
  - spec/fixtures/examples/rcsv.rubex
516
576
  - spec/fixtures/expressions/expressions.rubex
577
+ - spec/fixtures/external_c_struct/external_c_struct.rubex
517
578
  - spec/fixtures/if_else/if_else.rubex
518
579
  - spec/fixtures/implicit_lib_include/implicit_lib_include.rubex
519
580
  - spec/fixtures/init_ruby_objects_with_literal_syntax/init_ruby_objects_with_literal_syntax.rubex
581
+ - spec/fixtures/instance_variables/instance_variables.rubex
520
582
  - spec/fixtures/loops/loops.rubex
583
+ - spec/fixtures/module/module.rubex
584
+ - spec/fixtures/multi_file_programs/Rakefile
585
+ - spec/fixtures/multi_file_programs/a.rubex
586
+ - spec/fixtures/multi_file_programs/b.rubex
587
+ - spec/fixtures/multi_file_programs/multi_file_programs.rubex
588
+ - spec/fixtures/no_gil/no_gil.rubex
589
+ - spec/fixtures/no_gil_attach_class/no_gil_attach_class.rubex
590
+ - spec/fixtures/no_gil_compile_check/no_gil_compile_check.rubex
591
+ - spec/fixtures/outside_stmts/outside_stmts.rubex
592
+ - spec/fixtures/pow/pow.rubex
593
+ - spec/fixtures/rake_task/single_file/test.rubex
521
594
  - spec/fixtures/recursion/recursion.rubex
522
595
  - spec/fixtures/ruby_constant_method_calls/ruby_constant_method_calls.rubex
596
+ - spec/fixtures/ruby_constant_scoping/ruby_constant_scoping.rubex
523
597
  - spec/fixtures/ruby_operators/ruby_operators.rubex
524
598
  - spec/fixtures/ruby_raise/ruby_raise.rubex
525
599
  - spec/fixtures/ruby_strings/ruby_strings.rubex
@@ -536,9 +610,19 @@ test_files:
536
610
  - spec/if_else_spec.rb
537
611
  - spec/implicit_lib_include_spec.rb
538
612
  - spec/init_ruby_objects_with_literal_syntax_spec.rb
613
+ - spec/instance_variables_spec.rb
539
614
  - spec/loops_spec.rb
615
+ - spec/module_spec.rb
616
+ - spec/multi_file_programs_spec.rb
617
+ - spec/no_gil_attach_class_spec.rb
618
+ - spec/no_gil_compile_check_spec.rb
619
+ - spec/no_gil_spec.rb
620
+ - spec/outside_stmts_spec.rb
621
+ - spec/pow_spec.rb
622
+ - spec/rake_task_spec.rb
540
623
  - spec/recursion_spec.rb
541
624
  - spec/ruby_constant_method_calls_spec.rb
625
+ - spec/ruby_constant_scoping_spec.rb
542
626
  - spec/ruby_operators_spec.rb
543
627
  - spec/ruby_raise_spec.rb
544
628
  - spec/ruby_strings_spec.rb
@@ -1,41 +0,0 @@
1
- module Rubex
2
- module AST
3
- module Statement
4
- class Yield < Base
5
- def initialize(args)
6
- @args = args
7
- end
8
-
9
- def analyse_statement(local_scope)
10
- @args = @args.map do |arg|
11
- arg.analyse_types local_scope
12
- arg.allocate_temps local_scope
13
- arg.to_ruby_object
14
- end
15
- @args.each do |arg|
16
- arg.release_temps local_scope
17
- end
18
- end
19
-
20
- def generate_code(code, local_scope)
21
- @args.each do |a|
22
- a.generate_evaluation_code code, local_scope
23
- end
24
-
25
- if !@args.empty?
26
- code << "rb_yield_values(#{@args.size}, "
27
- code << (@args.map { |a| a.c_code(local_scope) }.join(',')).to_s
28
- code << ');'
29
- else
30
- code << 'rb_yield(Qnil);'
31
- end
32
- code.nl
33
-
34
- @args.each do |a|
35
- a.generate_disposal_code code
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end