ikra 0.0.1

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 (220) hide show
  1. checksums.yaml +7 -0
  2. data/lib/ast/builder.rb +100 -0
  3. data/lib/ast/lexical_variables_enumerator.rb +34 -0
  4. data/lib/ast/method_definition.rb +37 -0
  5. data/lib/ast/nodes.rb +208 -0
  6. data/lib/ast/printer.rb +99 -0
  7. data/lib/ast/translator.rb +264 -0
  8. data/lib/ast/visitor.rb +173 -0
  9. data/lib/config/configuration.rb +18 -0
  10. data/lib/config/os_configuration.rb +56 -0
  11. data/lib/entity.rb +11 -0
  12. data/lib/ikra.rb +7 -0
  13. data/lib/parsing.rb +32 -0
  14. data/lib/resources/cuda/block_function_head.cpp +1 -0
  15. data/lib/resources/cuda/env_builder_copy_array.cpp +4 -0
  16. data/lib/resources/cuda/header.cpp +46 -0
  17. data/lib/resources/cuda/kernel.cpp +8 -0
  18. data/lib/resources/cuda/kernel_launcher.cpp +28 -0
  19. data/lib/resources/cuda/soa_header.cpp +4 -0
  20. data/lib/scope.rb +166 -0
  21. data/lib/sourcify/Gemfile +10 -0
  22. data/lib/sourcify/HISTORY.txt +88 -0
  23. data/lib/sourcify/LICENSE +20 -0
  24. data/lib/sourcify/README.rdoc +352 -0
  25. data/lib/sourcify/Rakefile +111 -0
  26. data/lib/sourcify/lib/sourcify.rb +44 -0
  27. data/lib/sourcify/lib/sourcify/common/parser/converter.rb +29 -0
  28. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/comment.rb +23 -0
  29. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/counter.rb +43 -0
  30. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/dstring.rb +58 -0
  31. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/extensions.rb +140 -0
  32. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/heredoc.rb +26 -0
  33. data/lib/sourcify/lib/sourcify/common/parser/source_code.rb +45 -0
  34. data/lib/sourcify/lib/sourcify/common/ragel/common.rl +5 -0
  35. data/lib/sourcify/lib/sourcify/common/ragel/expressions.rl +38 -0
  36. data/lib/sourcify/lib/sourcify/common/ragel/machines.rl +317 -0
  37. data/lib/sourcify/lib/sourcify/errors.rb +4 -0
  38. data/lib/sourcify/lib/sourcify/method.rb +138 -0
  39. data/lib/sourcify/lib/sourcify/method/methods.rb +3 -0
  40. data/lib/sourcify/lib/sourcify/method/methods/to_raw_source.rb +30 -0
  41. data/lib/sourcify/lib/sourcify/method/methods/to_sexp.rb +30 -0
  42. data/lib/sourcify/lib/sourcify/method/methods/to_source.rb +30 -0
  43. data/lib/sourcify/lib/sourcify/method/parser.rb +110 -0
  44. data/lib/sourcify/lib/sourcify/method/parser/converter.rb +8 -0
  45. data/lib/sourcify/lib/sourcify/method/parser/raw_scanner.rb +2494 -0
  46. data/lib/sourcify/lib/sourcify/method/parser/raw_scanner.rl +144 -0
  47. data/lib/sourcify/lib/sourcify/method/parser/raw_scanner_extensions.rb +68 -0
  48. data/lib/sourcify/lib/sourcify/method/parser/scanner.rb +52 -0
  49. data/lib/sourcify/lib/sourcify/method/parser/source_code.rb +8 -0
  50. data/lib/sourcify/lib/sourcify/patches.rb +63 -0
  51. data/lib/sourcify/lib/sourcify/proc.rb +183 -0
  52. data/lib/sourcify/lib/sourcify/proc/methods.rb +3 -0
  53. data/lib/sourcify/lib/sourcify/proc/methods/source_location.rb +61 -0
  54. data/lib/sourcify/lib/sourcify/proc/methods/to_raw_source.rb +20 -0
  55. data/lib/sourcify/lib/sourcify/proc/methods/to_sexp.rb +40 -0
  56. data/lib/sourcify/lib/sourcify/proc/methods/to_source.rb +48 -0
  57. data/lib/sourcify/lib/sourcify/proc/parser.rb +51 -0
  58. data/lib/sourcify/lib/sourcify/proc/parser/converter.rb +8 -0
  59. data/lib/sourcify/lib/sourcify/proc/parser/normalizer.rb +43 -0
  60. data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner.rb +2498 -0
  61. data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner.rl +149 -0
  62. data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner_extensions.rb +74 -0
  63. data/lib/sourcify/lib/sourcify/proc/parser/scanner.rb +49 -0
  64. data/lib/sourcify/lib/sourcify/proc/parser/source_code.rb +8 -0
  65. data/lib/sourcify/lib/sourcify/version.rb +3 -0
  66. data/lib/sourcify/sourcify.gemspec +31 -0
  67. data/lib/sourcify/spec/dump_object_space_procs.rb +84 -0
  68. data/lib/sourcify/spec/method/encoding_from_def_end_block_spec.rb +33 -0
  69. data/lib/sourcify/spec/method/encoding_from_define_method_spec.rb +37 -0
  70. data/lib/sourcify/spec/method/others_from_def_end_block_spec.rb +49 -0
  71. data/lib/sourcify/spec/method/others_from_define_method_spec.rb +63 -0
  72. data/lib/sourcify/spec/method/raw_scanner/block_comment_spec.rb +8 -0
  73. data/lib/sourcify/spec/method/raw_scanner/double_colons_spec.rb +8 -0
  74. data/lib/sourcify/spec/method/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
  75. data/lib/sourcify/spec/method/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
  76. data/lib/sourcify/spec/method/raw_scanner/heredoc_w_indent_spec.rb +8 -0
  77. data/lib/sourcify/spec/method/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
  78. data/lib/sourcify/spec/method/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
  79. data/lib/sourcify/spec/method/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
  80. data/lib/sourcify/spec/method/raw_scanner/per_line_comment_spec.rb +8 -0
  81. data/lib/sourcify/spec/method/raw_scanner/single_quote_str_spec.rb +8 -0
  82. data/lib/sourcify/spec/method/raw_scanner/slash_operator_spec.rb +8 -0
  83. data/lib/sourcify/spec/method/raw_scanner/spec_helper.rb +80 -0
  84. data/lib/sourcify/spec/method/spec_helper.rb +1 -0
  85. data/lib/sourcify/spec/method/to_raw_source_spec.rb +31 -0
  86. data/lib/sourcify/spec/method/to_raw_source_w_specified_strip_enclosure_spec.rb +148 -0
  87. data/lib/sourcify/spec/method/to_sexp_from_def_end_block_w_variables_spec.rb +46 -0
  88. data/lib/sourcify/spec/method/to_sexp_from_def_end_block_within_irb_spec.rb +38 -0
  89. data/lib/sourcify/spec/method/to_sexp_from_def_end_block_within_pry_spec.rb +38 -0
  90. data/lib/sourcify/spec/method/to_sexp_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +56 -0
  91. data/lib/sourcify/spec/method/to_sexp_from_define_method_w_variables_spec.rb +52 -0
  92. data/lib/sourcify/spec/method/to_sexp_from_define_method_within_irb_spec.rb +42 -0
  93. data/lib/sourcify/spec/method/to_sexp_from_define_method_within_pry_spec.rb +42 -0
  94. data/lib/sourcify/spec/method/to_sexp_w_specified_strip_enclosure_spec.rb +74 -0
  95. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_19_extras_spec.rb +23 -0
  96. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_begin_spec.rb +35 -0
  97. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_case_spec.rb +35 -0
  98. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_class_spec.rb +51 -0
  99. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_do_end_block_spec.rb +33 -0
  100. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_for_spec.rb +126 -0
  101. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_if_spec.rb +83 -0
  102. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_literal_keyword_spec.rb +141 -0
  103. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_method_spec.rb +33 -0
  104. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_module_spec.rb +59 -0
  105. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_unless_spec.rb +83 -0
  106. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_until_spec.rb +179 -0
  107. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_while_spec.rb +179 -0
  108. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_singleton_method_spec.rb +19 -0
  109. data/lib/sourcify/spec/method/to_source_from_def_end_block_within_irb_spec.rb +30 -0
  110. data/lib/sourcify/spec/method/to_source_from_def_end_block_within_pry_spec.rb +45 -0
  111. data/lib/sourcify/spec/method/to_source_from_def_end_w_multi_blocks_and_many_matches_spec.rb +30 -0
  112. data/lib/sourcify/spec/method/to_source_from_def_end_w_multi_blocks_and_single_match_spec.rb +36 -0
  113. data/lib/sourcify/spec/method/to_source_from_define_method_w_braced_block_spec.rb +113 -0
  114. data/lib/sourcify/spec/method/to_source_from_define_method_w_do_end_block_spec.rb +145 -0
  115. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_many_matches_spec.rb +56 -0
  116. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_single_match_spec.rb +73 -0
  117. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_many_matches_spec.rb +36 -0
  118. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_no_match_spec.rb +36 -0
  119. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_single_match_spec.rb +28 -0
  120. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +103 -0
  121. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_many_matches_spec.rb +36 -0
  122. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_no_match_spec.rb +36 -0
  123. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_single_match_spec.rb +28 -0
  124. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_ignore_nested_spec.rb +36 -0
  125. data/lib/sourcify/spec/method/to_source_from_define_method_within_irb_spec.rb +32 -0
  126. data/lib/sourcify/spec/method/to_source_from_define_method_within_pry_spec.rb +49 -0
  127. data/lib/sourcify/spec/method/to_source_magic_file_var_spec.rb +176 -0
  128. data/lib/sourcify/spec/method/to_source_magic_line_var_spec.rb +298 -0
  129. data/lib/sourcify/spec/method/to_source_w_specified_strip_enclosure_spec.rb +39 -0
  130. data/lib/sourcify/spec/no_method/unsupported_platform_spec.rb +26 -0
  131. data/lib/sourcify/spec/proc/19x_extras.rb +27 -0
  132. data/lib/sourcify/spec/proc/created_on_the_fly_proc_spec.rb +80 -0
  133. data/lib/sourcify/spec/proc/encoding_spec.rb +36 -0
  134. data/lib/sourcify/spec/proc/others_spec.rb +40 -0
  135. data/lib/sourcify/spec/proc/raw_scanner/block_comment_spec.rb +8 -0
  136. data/lib/sourcify/spec/proc/raw_scanner/double_colons_spec.rb +8 -0
  137. data/lib/sourcify/spec/proc/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
  138. data/lib/sourcify/spec/proc/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
  139. data/lib/sourcify/spec/proc/raw_scanner/heredoc_w_indent_spec.rb +8 -0
  140. data/lib/sourcify/spec/proc/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
  141. data/lib/sourcify/spec/proc/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
  142. data/lib/sourcify/spec/proc/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
  143. data/lib/sourcify/spec/proc/raw_scanner/per_line_comment_spec.rb +8 -0
  144. data/lib/sourcify/spec/proc/raw_scanner/single_quote_str_spec.rb +8 -0
  145. data/lib/sourcify/spec/proc/raw_scanner/slash_operator_spec.rb +8 -0
  146. data/lib/sourcify/spec/proc/raw_scanner/spec_helper.rb +63 -0
  147. data/lib/sourcify/spec/proc/readme +5 -0
  148. data/lib/sourcify/spec/proc/spec_helper.rb +1 -0
  149. data/lib/sourcify/spec/proc/to_raw_source_spec.rb +33 -0
  150. data/lib/sourcify/spec/proc/to_raw_source_w_specified_strip_enclosure_spec.rb +69 -0
  151. data/lib/sourcify/spec/proc/to_sexp_from_multi_blocks_w_specified_attached_to_spec.rb +46 -0
  152. data/lib/sourcify/spec/proc/to_sexp_variables_spec.rb +146 -0
  153. data/lib/sourcify/spec/proc/to_sexp_w_specified_strip_enclosure_spec.rb +60 -0
  154. data/lib/sourcify/spec/proc/to_sexp_within_irb_spec.rb +146 -0
  155. data/lib/sourcify/spec/proc/to_sexp_within_pry_spec.rb +149 -0
  156. data/lib/sourcify/spec/proc/to_source_from_braced_block_w_nested_braced_block_spec.rb +33 -0
  157. data/lib/sourcify/spec/proc/to_source_from_braced_block_w_nested_hash_spec.rb +82 -0
  158. data/lib/sourcify/spec/proc/to_source_from_braced_block_wo_nesting_complication_spec.rb +46 -0
  159. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_begin_spec.rb +35 -0
  160. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_case_spec.rb +35 -0
  161. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_class_spec.rb +89 -0
  162. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_do_end_block_spec.rb +33 -0
  163. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_for_spec.rb +132 -0
  164. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_if_spec.rb +87 -0
  165. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_literal_keyword_spec.rb +103 -0
  166. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_method_spec.rb +33 -0
  167. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_module_spec.rb +49 -0
  168. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_unless_spec.rb +87 -0
  169. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_until_spec.rb +189 -0
  170. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_while_spec.rb +189 -0
  171. data/lib/sourcify/spec/proc/to_source_from_do_end_block_wo_nesting_complication_spec.rb +46 -0
  172. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_many_matches_spec.rb +43 -0
  173. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_single_match_spec.rb +20 -0
  174. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_many_matches_spec.rb +45 -0
  175. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_no_match_spec.rb +45 -0
  176. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_single_match_spec.rb +22 -0
  177. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_spec.rb +84 -0
  178. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_many_matches_spec.rb +45 -0
  179. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_no_match_spec.rb +45 -0
  180. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_single_match_spec.rb +22 -0
  181. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_ignore_nested_spec.rb +43 -0
  182. data/lib/sourcify/spec/proc/to_source_from_multi_do_end_blocks_w_single_match_spec.rb +31 -0
  183. data/lib/sourcify/spec/proc/to_source_magic_file_var_spec.rb +127 -0
  184. data/lib/sourcify/spec/proc/to_source_magic_line_var_spec.rb +127 -0
  185. data/lib/sourcify/spec/proc/to_source_variables_spec.rb +29 -0
  186. data/lib/sourcify/spec/proc/to_source_w_specified_strip_enclosure_spec.rb +33 -0
  187. data/lib/sourcify/spec/proc/to_source_within_irb_spec.rb +38 -0
  188. data/lib/sourcify/spec/proc/to_source_within_pry_spec.rb +61 -0
  189. data/lib/sourcify/spec/raw_scanner/block_comment_shared_spec.rb +57 -0
  190. data/lib/sourcify/spec/raw_scanner/double_colons_shared_spec.rb +11 -0
  191. data/lib/sourcify/spec/raw_scanner/double_quote_str_w_interpolation_shared_spec.rb +60 -0
  192. data/lib/sourcify/spec/raw_scanner/double_quote_str_wo_interpolation_shared_spec.rb +86 -0
  193. data/lib/sourcify/spec/raw_scanner/heredoc_w_indent_shared_spec.rb +69 -0
  194. data/lib/sourcify/spec/raw_scanner/heredoc_wo_indent_shared_spec.rb +70 -0
  195. data/lib/sourcify/spec/raw_scanner/kw_block_start_alias1_shared_spec.rb +73 -0
  196. data/lib/sourcify/spec/raw_scanner/kw_block_start_alias2_shared_spec.rb +73 -0
  197. data/lib/sourcify/spec/raw_scanner/per_line_comment_shared_spec.rb +32 -0
  198. data/lib/sourcify/spec/raw_scanner/shared_specs.rb +3 -0
  199. data/lib/sourcify/spec/raw_scanner/single_quote_str_shared_spec.rb +79 -0
  200. data/lib/sourcify/spec/raw_scanner/slash_operator_shared_spec.rb +71 -0
  201. data/lib/sourcify/spec/run_build.sh +25 -0
  202. data/lib/sourcify/spec/spec_helper.rb +130 -0
  203. data/lib/symbolic/symbolic.rb +248 -0
  204. data/lib/symbolic/visitor.rb +51 -0
  205. data/lib/translator/block_translator.rb +123 -0
  206. data/lib/translator/command_translator.rb +421 -0
  207. data/lib/translator/last_returns_visitor.rb +57 -0
  208. data/lib/translator/local_variables_enumerator.rb +35 -0
  209. data/lib/translator/method_translator.rb +24 -0
  210. data/lib/translator/translator.rb +49 -0
  211. data/lib/type_aware_array.rb +71 -0
  212. data/lib/types/array_type.rb +51 -0
  213. data/lib/types/class_type.rb +128 -0
  214. data/lib/types/object_tracer.rb +162 -0
  215. data/lib/types/primitive_type.rb +73 -0
  216. data/lib/types/ruby_extension.rb +67 -0
  217. data/lib/types/ruby_type.rb +45 -0
  218. data/lib/types/type_inference.rb +382 -0
  219. data/lib/types/union_type.rb +155 -0
  220. metadata +321 -0
@@ -0,0 +1,35 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Method#to_source (from def ... end block)" do
4
+ describe "w nested case" do
5
+
6
+ should 'handle simple' do
7
+ def m1
8
+ case @x1 when true then false end
9
+ end
10
+ method(:m1).should.be having_source(%(
11
+ def m1
12
+ case @x1 when true then false end
13
+ end
14
+ ))
15
+ end
16
+
17
+ should 'handle nested' do
18
+ def m2
19
+ case @x1
20
+ when true
21
+ case @x2 when false then true end
22
+ end
23
+ end
24
+ method(:m2).should.be having_source(%(
25
+ def m2
26
+ case @x1
27
+ when true
28
+ case @x2 when false then true end
29
+ end
30
+ end
31
+ ))
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,51 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Method#to_source (from def ... end block)" do
4
+ describe "w nested class" do
5
+
6
+ class AA; end
7
+
8
+ should 'handle singleton' do
9
+ def m1
10
+ class << AA
11
+ def aa
12
+ @x1 = 1
13
+ end
14
+ end
15
+ end
16
+ method(:m1).should.be having_source(%(
17
+ def m1
18
+ class << AA
19
+ def aa
20
+ @x1 = 1
21
+ end
22
+ end
23
+ end
24
+ ))
25
+ end
26
+
27
+ should 'handle nested' do
28
+ def m2
29
+ class << AA
30
+ class BB
31
+ def bb
32
+ @x1 = 1
33
+ end
34
+ end
35
+ end
36
+ end
37
+ method(:m2).should.be having_source(%(
38
+ def m2
39
+ class << AA
40
+ class BB
41
+ def bb
42
+ @x1 = 1
43
+ end
44
+ end
45
+ end
46
+ end
47
+ ))
48
+ end
49
+
50
+ end
51
+ end
@@ -0,0 +1,33 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Method#to_source (from def ... end block)" do
4
+ describe "w nested do ... end block" do
5
+
6
+ should 'handle simple' do
7
+ def m1
8
+ lambda do @x1 = 1 end
9
+ end
10
+ method(:m1).should.be having_source(%(
11
+ def m1
12
+ lambda { @x1 = 1 }
13
+ end
14
+ ))
15
+ end
16
+
17
+ should 'handle nested' do
18
+ def m2
19
+ lambda do
20
+ lambda do @x1 = 1 end
21
+ end
22
+ end
23
+ method(:m2).should.be having_source(%(
24
+ def m2
25
+ lambda do
26
+ lambda { @x1 = 1 }
27
+ end
28
+ end
29
+ ))
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,126 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Method#to_source (from def ... end block)" do
4
+ describe "w nested for block" do
5
+
6
+ should 'handle w do' do
7
+ def m1
8
+ for x1 in [1,2] do x1 end
9
+ end
10
+ method(:m1).should.be having_source(%(
11
+ def m1
12
+ for x1 in [1,2] do x1 end
13
+ end
14
+ ))
15
+ end
16
+
17
+ should 'handle w \ do' do
18
+ def m2
19
+ for x2 in [1,2] \
20
+ do x2 end
21
+ end
22
+ method(:m2).should.be having_source(%(
23
+ def m2
24
+ for x2 in [1,2] do x2 end
25
+ end
26
+ ))
27
+ end
28
+
29
+ should 'handle wo do (w newline)' do
30
+ def m3
31
+ for x3 in [1,2]
32
+ x3
33
+ end
34
+ end
35
+ method(:m3).should.be having_source(%(
36
+ def m3
37
+ for x3 in [1,2]
38
+ x3
39
+ end
40
+ end
41
+ ))
42
+ end
43
+
44
+ should 'handle wo do (w semicolon)' do
45
+ def m4
46
+ for x4 in [1,2]; x4; end
47
+ end
48
+ method(:m4).should.be having_source(%(
49
+ def m4
50
+ for x4 in [1,2]
51
+ x4
52
+ end
53
+ end
54
+ ))
55
+ end
56
+
57
+ should 'handle nested wo do within w do' do
58
+ def m5
59
+ for x1 in [1,2] do
60
+ for x2 in [1,2]
61
+ x2
62
+ end
63
+ end
64
+ end
65
+ method(:m5).should.be having_source(%(
66
+ def m5
67
+ for x1 in [1,2] do
68
+ for x2 in [1,2]
69
+ x2
70
+ end
71
+ end
72
+ end
73
+ ))
74
+ end
75
+
76
+ should 'handle nested wo do within wo do' do
77
+ def m6
78
+ for x1 in [2,3]
79
+ for x2 in [2,3]
80
+ x2
81
+ end
82
+ end
83
+ end
84
+ method(:m6).should.be having_source(%(
85
+ def m6
86
+ for x1 in [2,3] do
87
+ for x2 in [2,3]
88
+ x2
89
+ end
90
+ end
91
+ end
92
+ ))
93
+ end
94
+
95
+ should 'handle nested w do within wo do' do
96
+ def m7
97
+ for x1 in [3,4]
98
+ for x2 in [3,4] do x2 end
99
+ end
100
+ end
101
+ method(:m7).should.be having_source(%(
102
+ def m7
103
+ for x1 in [3,4]
104
+ for x2 in [3,4] do x2 end
105
+ end
106
+ end
107
+ ))
108
+ end
109
+
110
+ should 'handle nested w do within w do' do
111
+ def m8
112
+ for x1 in [4,5] \
113
+ do for x2 in [4,5] do x2 end
114
+ end
115
+ end
116
+ method(:m8).should.be having_source(%(
117
+ def m8
118
+ for x1 in [4,5]
119
+ for x2 in [4,5] do x2 end
120
+ end
121
+ end
122
+ ))
123
+ end
124
+
125
+ end
126
+ end
@@ -0,0 +1,83 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Method#to_source (from def ... end block)" do
4
+ describe "w nested if" do
5
+
6
+ should 'handle simple block' do
7
+ def m1
8
+ if @x1 then @x1 = 1 end
9
+ end
10
+ method(:m1).should.be having_source(%(
11
+ def m1
12
+ if @x1 then @x1 = 1 end
13
+ end
14
+ ))
15
+ end
16
+
17
+ should 'handle nested block' do
18
+ def m2
19
+ if @x1
20
+ if @x2 then @x2 = 1 end
21
+ end
22
+ end
23
+ method(:m2).should.be having_source(%(
24
+ def m2
25
+ if @x1
26
+ if @x2 then @x2 = 1 end
27
+ end
28
+ end
29
+ ))
30
+ end
31
+
32
+ should 'handle simple modifier' do
33
+ def m3
34
+ @x1 = 1 if true
35
+ end
36
+ method(:m3).should.be having_source(%(
37
+ def m3
38
+ @x1 = 1 if true
39
+ end
40
+ ))
41
+ end
42
+
43
+ # NOTE: Syntatically correct, but the RubyParser-2.3.* can't handle it.
44
+ # should 'handle block within modifier' do
45
+ # def m4
46
+ # @x1 = 1 if (if @x1 then true end)
47
+ # end
48
+ # method(:m4).should.be having_source(%(
49
+ # def m4
50
+ # @x1 = 1 if (if @x1 then true end)
51
+ # end
52
+ # ))
53
+ # end
54
+
55
+ should 'handle modifier w trailing backslash' do
56
+ def m5
57
+ @x1 = 1 \
58
+ if true
59
+ end
60
+ method(:m5).should.be having_source(%(
61
+ def m5
62
+ @x1 = 1 if true
63
+ end
64
+ ))
65
+ end
66
+
67
+ should 'handle modifier within block' do
68
+ def m6
69
+ if @x1
70
+ @x1 = 1 if @x2
71
+ end
72
+ end
73
+ method(:m6).should.be having_source(%(
74
+ def m6
75
+ if @x1
76
+ @x1 = 1 if @x2
77
+ end
78
+ end
79
+ ))
80
+ end
81
+
82
+ end
83
+ end
@@ -0,0 +1,141 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Method#to_source (from def ... end block)" do
4
+ describe "w nested literal keyword" do
5
+
6
+ # See http://redmine.ruby-lang.org/issues/show/3764
7
+
8
+ should 'handle :class' do
9
+ def m1
10
+ x = :class
11
+ end
12
+ method(:m1).should.be having_source(%(
13
+ def m1
14
+ x = :class
15
+ end
16
+ ))
17
+ end
18
+
19
+ should 'handle :module' do
20
+ def m2
21
+ x = :module
22
+ end
23
+ method(:m2).should.be having_source(%(
24
+ def m2
25
+ x = :module
26
+ end
27
+ ))
28
+ end
29
+
30
+ should 'handle :def' do
31
+ def m3
32
+ x = :def
33
+ end
34
+ method(:m3).should.be having_source(%(
35
+ def m3
36
+ x = :def
37
+ end
38
+ ))
39
+ end
40
+
41
+ should 'handle :if' do
42
+ def m4
43
+ x = :if
44
+ end
45
+ method(:m4).should.be having_source(%(
46
+ def m4
47
+ x = :if
48
+ end
49
+ ))
50
+ end
51
+
52
+ should 'handle :unless' do
53
+ def m5
54
+ x = :unless
55
+ end
56
+ method(:m5).should.be having_source(%(
57
+ def m5
58
+ x = :unless
59
+ end
60
+ ))
61
+ end
62
+
63
+ should 'handle :for' do
64
+ def m6
65
+ x = :for
66
+ end
67
+ method(:m6).should.be having_source(%(
68
+ def m6
69
+ x = :for
70
+ end
71
+ ))
72
+ end
73
+
74
+ should 'handle :while' do
75
+ def m7
76
+ x = :while
77
+ end
78
+ method(:m7).should.be having_source(%(
79
+ def m7
80
+ x = :while
81
+ end
82
+ ))
83
+ end
84
+
85
+ should 'handle :until' do
86
+ def m8
87
+ x = :until
88
+ end
89
+ method(:m8).should.be having_source(%(
90
+ def m8
91
+ x = :until
92
+ end
93
+ ))
94
+ end
95
+
96
+ should 'handle :begin' do
97
+ def m9
98
+ x = :begin
99
+ end
100
+ method(:m9).should.be having_source(%(
101
+ def m9
102
+ x = :begin
103
+ end
104
+ ))
105
+ end
106
+
107
+ should 'handle :case' do
108
+ def m10
109
+ x = :case
110
+ end
111
+ method(:m10).should.be having_source(%(
112
+ def m10
113
+ x = :case
114
+ end
115
+ ))
116
+ end
117
+
118
+ should 'handle :do' do
119
+ def m11
120
+ x = :do
121
+ end
122
+ method(:m11).should.be having_source(%(
123
+ def m11
124
+ x = :do
125
+ end
126
+ ))
127
+ end
128
+
129
+ should 'handle :end' do
130
+ def m12
131
+ x = :end
132
+ end
133
+ method(:m12).should.be having_source(%(
134
+ def m12
135
+ x = :end
136
+ end
137
+ ))
138
+ end
139
+
140
+ end
141
+ end