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.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/CONTRIBUTING.md +73 -9
- data/HISTORY.md +19 -0
- data/README.md +53 -8
- data/REFERENCE.md +112 -44
- data/benchmarks/no_gil/no_gil.rb +24 -0
- data/benchmarks/no_gil/no_gil.rubex +22 -0
- data/bin/rubex +1 -1
- data/examples/c_struct_interface/c_struct_interface.rubex +1 -0
- data/lib/rubex.rb +1 -0
- data/lib/rubex/ast.rb +11 -7
- data/lib/rubex/ast/expression.rb +1 -1
- data/lib/rubex/ast/expression/actual_arg_list.rb +7 -0
- data/lib/rubex/ast/expression/analysed_element_ref/c_var_element_ref.rb +5 -2
- data/lib/rubex/ast/expression/analysed_element_ref/ruby_object_element_ref.rb +26 -9
- data/lib/rubex/ast/expression/binary/binary_boolean.rb +1 -1
- data/lib/rubex/ast/expression/binary/binary_expo.rb +34 -0
- data/lib/rubex/ast/expression/binary/colon2.rb +34 -0
- data/lib/rubex/ast/expression/binary/empty_classes.rb +0 -3
- data/lib/rubex/ast/expression/command_call.rb +24 -0
- data/lib/rubex/ast/{statement → expression/command_call}/print.rb +4 -5
- data/lib/rubex/ast/{statement → expression/command_call}/raise.rb +29 -24
- data/lib/rubex/ast/expression/command_call/require.rb +27 -0
- data/lib/rubex/ast/expression/command_call/yield.rb +36 -0
- data/lib/rubex/ast/expression/element_ref.rb +10 -5
- data/lib/rubex/ast/expression/instance_var.rb +33 -0
- data/lib/rubex/ast/expression/method_call.rb +4 -2
- data/lib/rubex/ast/expression/method_call/c_function_call.rb +4 -3
- data/lib/rubex/ast/expression/method_call/ruby_method_call.rb +7 -5
- data/lib/rubex/ast/expression/name.rb +10 -1
- data/lib/rubex/ast/expression/ruby_object_element_ref/ruby_array_element_ref.rb +5 -2
- data/lib/rubex/ast/expression/ruby_object_element_ref/ruby_hash_element_ref.rb +10 -2
- data/lib/rubex/ast/expression/to_ruby_object.rb +1 -0
- data/lib/rubex/ast/expression/unary.rb +7 -3
- data/lib/rubex/ast/expression/unary_base/ampersand.rb +5 -0
- data/lib/rubex/ast/node.rb +213 -185
- data/lib/rubex/ast/node/file_node.rb +25 -0
- data/lib/rubex/ast/node/main_node.rb +56 -0
- data/lib/rubex/ast/statement/begin_block/begin.rb +4 -3
- data/lib/rubex/ast/statement/c_array_decl.rb +1 -1
- data/lib/rubex/ast/statement/c_ptr_decl.rb +2 -0
- data/lib/rubex/ast/statement/no_gil_block.rb +70 -0
- data/lib/rubex/ast/statement/return.rb +1 -0
- data/lib/rubex/ast/top_statement.rb +1 -1
- data/lib/rubex/ast/top_statement/klass.rb +4 -0
- data/lib/rubex/ast/top_statement/klass/attached_klass.rb +88 -10
- data/lib/rubex/ast/top_statement/method_def.rb +2 -3
- data/lib/rubex/ast/top_statement/method_def/c_function_def.rb +10 -4
- data/lib/rubex/cli.rb +11 -6
- data/lib/rubex/code_supervisor.rb +49 -0
- data/lib/rubex/code_writer.rb +22 -1
- data/lib/rubex/compiler.rb +109 -30
- data/lib/rubex/compiler_config.rb +14 -1
- data/lib/rubex/constants.rb +3 -0
- data/lib/rubex/data_type.rb +2 -3
- data/lib/rubex/data_type/ruby_object/ruby_symbol.rb +0 -1
- data/lib/rubex/error.rb +4 -0
- data/lib/rubex/helpers/writers.rb +33 -4
- data/lib/rubex/lexer.rex +9 -1
- data/lib/rubex/lexer.rex.rb +15 -2
- data/lib/rubex/parser.racc +125 -49
- data/lib/rubex/parser.racc.rb +1526 -1376
- data/lib/rubex/rake_task.rb +42 -6
- data/lib/rubex/symbol_table/entry.rb +6 -0
- data/lib/rubex/symbol_table/scope.rb +28 -3
- data/lib/rubex/version.rb +1 -1
- data/rubex.gemspec +1 -0
- data/spec/basic_ruby_method_spec.rb +2 -2
- data/spec/blocks_spec.rb +2 -2
- data/spec/box_op_multi_args_spec.rb +34 -0
- data/spec/c_function_ptrs_spec.rb +2 -2
- data/spec/c_functions_spec.rb +2 -0
- data/spec/c_struct_interface_spec.rb +8 -3
- data/spec/default_args_spec.rb +2 -2
- data/spec/external_c_struct_spec.rb +33 -0
- data/spec/fixtures/api/consumer.rubex +0 -0
- data/spec/fixtures/api/implementation.rubex +0 -0
- data/spec/fixtures/api/implementation.rubexd +0 -0
- data/spec/fixtures/box_op_multi_args/box_op_multi_args.rubex +3 -0
- data/spec/fixtures/c_functions/c_functions.rubex +13 -0
- data/spec/fixtures/c_struct_interface/c_struct_interface.rubex +28 -0
- data/spec/fixtures/class_methods/class_methods.rubex +1 -1
- data/spec/fixtures/error_handling/error_handling.rubex +2 -2
- data/spec/fixtures/external_c_struct/external_c_struct.rubex +16 -0
- data/spec/fixtures/if_else/if_else.rubex +1 -1
- data/spec/fixtures/init_ruby_objects_with_literal_syntax/init_ruby_objects_with_literal_syntax.rubex +1 -1
- data/spec/fixtures/instance_variables/instance_variables.rubex +25 -0
- data/spec/fixtures/loops/loops.rubex +2 -2
- data/spec/fixtures/module/module.rubex +28 -0
- data/spec/fixtures/multi_file_programs/Rakefile +8 -0
- data/spec/fixtures/multi_file_programs/a.rubex +5 -0
- data/spec/fixtures/multi_file_programs/b.rubex +5 -0
- data/spec/fixtures/multi_file_programs/multi_file_programs.rubex +14 -0
- data/spec/fixtures/no_gil/no_gil.rubex +24 -0
- data/spec/fixtures/no_gil_attach_class/no_gil_attach_class.rubex +23 -0
- data/spec/fixtures/no_gil_compile_check/no_gil_compile_check.rubex +4 -0
- data/spec/fixtures/outside_stmts/outside_stmts.rubex +6 -0
- data/spec/fixtures/pow/pow.rubex +4 -0
- data/spec/fixtures/rake_task/single_file/test.rubex +3 -0
- data/spec/fixtures/recursion/recursion.rubex +1 -1
- data/spec/fixtures/ruby_constant_scoping/ruby_constant_scoping.rubex +7 -0
- data/spec/fixtures/ruby_operators/ruby_operators.rubex +1 -1
- data/spec/fixtures/ruby_raise/ruby_raise.rubex +2 -2
- data/spec/fixtures/ruby_types/ruby_types.rubex +4 -4
- data/spec/fixtures/statement_expression/statement_expression.rubex +2 -2
- data/spec/fixtures/static_array/static_array.rubex +3 -3
- data/spec/fixtures/string_literals/string_literals.rubex +12 -2
- data/spec/fixtures/struct/struct.rubex +1 -1
- data/spec/fixtures/var_declarations/var_declarations.rubex +1 -1
- data/spec/implicit_lib_include_spec.rb +2 -2
- data/spec/init_ruby_objects_with_literal_syntax_spec.rb +2 -2
- data/spec/instance_variables_spec.rb +33 -0
- data/spec/loops_spec.rb +2 -2
- data/spec/module_spec.rb +39 -0
- data/spec/multi_file_programs_spec.rb +41 -0
- data/spec/no_gil_attach_class_spec.rb +33 -0
- data/spec/no_gil_compile_check_spec.rb +25 -0
- data/spec/no_gil_spec.rb +36 -0
- data/spec/outside_stmts_spec.rb +34 -0
- data/spec/pow_spec.rb +33 -0
- data/spec/rake_task_spec.rb +142 -0
- data/spec/recursion_spec.rb +4 -4
- data/spec/ruby_constant_scoping_spec.rb +42 -0
- data/spec/ruby_raise_spec.rb +2 -2
- data/spec/ruby_symbols_spec.rb +2 -2
- data/spec/ruby_types_spec.rb +2 -2
- data/spec/spec_helper.rb +17 -3
- data/spec/string_literals_spec.rb +1 -0
- metadata +90 -6
- data/lib/rubex/ast/statement/yield.rb +0 -41
data/spec/ruby_raise_spec.rb
CHANGED
@@ -14,13 +14,13 @@ describe Rubex do
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
context ".compile"
|
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"
|
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}"
|
data/spec/ruby_symbols_spec.rb
CHANGED
@@ -14,13 +14,13 @@ describe Rubex do
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
context ".compile"
|
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"
|
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}"
|
data/spec/ruby_types_spec.rb
CHANGED
@@ -14,13 +14,13 @@ describe Rubex do
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
context ".compile"
|
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"
|
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}"
|
data/spec/spec_helper.rb
CHANGED
@@ -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',
|
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(
|
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']
|
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.
|
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-
|
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/
|
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.
|
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
|