rubex 0.1.1 → 0.1.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.
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