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,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 method" do
5
+
6
+ should 'handle simple' do
7
+ def m1
8
+ def aa; x = 1; end
9
+ end
10
+ method(:m1).should.be having_source(%(
11
+ def m1
12
+ def aa; x = 1; end
13
+ end
14
+ ))
15
+ end
16
+
17
+ should 'handle nested' do
18
+ def m2
19
+ def aa
20
+ def bb; x = 2; end
21
+ end
22
+ end
23
+ method(:m2).should.be having_source(%(
24
+ def m2
25
+ def aa
26
+ def bb; x = 2; end
27
+ end
28
+ end
29
+ ))
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,59 @@
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 module" do
5
+
6
+ class AA; end
7
+
8
+ should 'handle simple' do
9
+ def m1
10
+ class << AA
11
+ module BB
12
+ def aa
13
+ @x1 = 1
14
+ end
15
+ end
16
+ end
17
+ end
18
+ method(:m1).should.be having_source(%(
19
+ def m1
20
+ class << AA
21
+ module BB
22
+ def aa
23
+ @x1 = 1
24
+ end
25
+ end
26
+ end
27
+ end
28
+ ))
29
+ end
30
+
31
+ should 'handle nested' do
32
+ def m2
33
+ class << AA
34
+ module BB
35
+ module CC
36
+ def bb
37
+ @x1 = 1
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ method(:m2).should.be having_source(%(
44
+ def m2
45
+ class << AA
46
+ module BB
47
+ module CC
48
+ def bb
49
+ @x1 = 1
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ ))
56
+ end
57
+
58
+ end
59
+ 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 unless" do
5
+
6
+ should 'handle simple block' do
7
+ def m1
8
+ unless @x1 then @x1 = 1 end
9
+ end
10
+ method(:m1).should.be having_source(%(
11
+ def m1
12
+ unless @x1 then @x1 = 1 end
13
+ end
14
+ ))
15
+ end
16
+
17
+ should 'handle nested block' do
18
+ def m2
19
+ unless @x1
20
+ unless @x2 then @x2 = 1 end
21
+ end
22
+ end
23
+ method(:m2).should.be having_source(%(
24
+ def m2
25
+ unless @x1
26
+ unless @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 unless true
35
+ end
36
+ method(:m3).should.be having_source(%(
37
+ def m3
38
+ @x1 = 1 unless 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 unless (unless @x1 then true end)
47
+ # end
48
+ # method(:m4).should.be having_source(%(
49
+ # def m4
50
+ # @x1 = 1 unless (unless @x1 then true end)
51
+ # end
52
+ # ))
53
+ # end
54
+
55
+ should 'handle modifier within block' do
56
+ def m5
57
+ unless @x1
58
+ @x1 = 1 unless @x2
59
+ end
60
+ end
61
+ method(:m5).should.be having_source(%(
62
+ def m5
63
+ unless @x1
64
+ @x1 = 1 unless @x2
65
+ end
66
+ end
67
+ ))
68
+ end
69
+
70
+ should 'handle modifier w trailing backslash' do
71
+ def m6
72
+ @x1 = 1 \
73
+ unless true
74
+ end
75
+ method(:m6).should.be having_source(%(
76
+ def m6
77
+ @x1 = 1 unless true
78
+ end
79
+ ))
80
+ end
81
+
82
+ end
83
+ end
@@ -0,0 +1,179 @@
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 until block" do
5
+
6
+ should 'handle w do' do
7
+ def m1
8
+ until true do @x1 = 1 end
9
+ end
10
+ method(:m1).should.be having_source(%(
11
+ def m1
12
+ until true do @x1 = 1 end
13
+ end
14
+ ))
15
+ end
16
+
17
+ should 'handle w \ do' do
18
+ def m2
19
+ until true \
20
+ do @x1 = 2 end
21
+ end
22
+ method(:m2).should.be having_source(%(
23
+ def m2
24
+ until true do @x1 = 2 end
25
+ end
26
+ ))
27
+ end
28
+
29
+ should 'handle wo do (w newline)' do
30
+ def m3
31
+ until true
32
+ @x1 = 3
33
+ end
34
+ end
35
+ method(:m3).should.be having_source(%(
36
+ def m3
37
+ until true
38
+ @x1 = 3
39
+ end
40
+ end
41
+ ))
42
+ end
43
+
44
+ should 'handle wo do (w semicolon)' do
45
+ def m4
46
+ until true; @x1 = 4; end
47
+ end
48
+ method(:m4).should.be having_source(%(
49
+ def m4
50
+ until true
51
+ @x1 = 4
52
+ end
53
+ end
54
+ ))
55
+ end
56
+
57
+ should 'handle nested wo do within w do' do
58
+ def m5
59
+ until true do
60
+ until true; @x1 = 5; end
61
+ end
62
+ end
63
+ method(:m5).should.be having_source(%(
64
+ def m5
65
+ until true do
66
+ until true
67
+ @x1 = 5
68
+ end
69
+ end
70
+ end
71
+ ))
72
+ end
73
+
74
+ should 'handle nested wo do within wo do' do
75
+ def m6
76
+ until true
77
+ until true; @x1 = 6; end
78
+ end
79
+ end
80
+ method(:m6).should.be having_source(%(
81
+ def m6
82
+ until true
83
+ until true
84
+ @x1 = 6
85
+ end
86
+ end
87
+ end
88
+ ))
89
+ end
90
+
91
+ should 'handle nested w do within wo do' do
92
+ def m7
93
+ until true
94
+ until true do @x1 = 7 end
95
+ end
96
+ end
97
+ method(:m7).should.be having_source(%(
98
+ def m7
99
+ until true
100
+ until true
101
+ @x1 = 7
102
+ end
103
+ end
104
+ end
105
+ ))
106
+ end
107
+
108
+ should 'handle nested w do within w do' do
109
+ def m8
110
+ until true do
111
+ until true do @x1 = 8 end
112
+ end
113
+ end
114
+ method(:m8).should.be having_source(%(
115
+ def m8
116
+ until true
117
+ until true
118
+ @x1 = 8
119
+ end
120
+ end
121
+ end
122
+ ))
123
+ end
124
+
125
+ should 'handle simple modifier' do
126
+ def m9
127
+ @x1 = 9 until true
128
+ end
129
+ method(:m9).should.be having_source(%(
130
+ def m9
131
+ @x1 = 9 until true
132
+ end
133
+ ))
134
+ end
135
+
136
+ should 'handle block within modifier' do
137
+ def m10
138
+ @x1 = 10 until (
139
+ until true do @x1 = 10 end
140
+ )
141
+ end
142
+ method(:m10).should.be having_source(%(
143
+ def m10
144
+ @x1 = 10 until (
145
+ until true do @x1 = 10 end
146
+ )
147
+ end
148
+ ))
149
+ end
150
+
151
+ should 'handle modifier within block' do
152
+ def m11
153
+ until true
154
+ @x1 = 11 until true
155
+ end
156
+ end
157
+ method(:m11).should.be having_source(%(
158
+ def m11
159
+ until true
160
+ @x1 = 11 until true
161
+ end
162
+ end
163
+ ))
164
+ end
165
+
166
+ should 'handle modifier w trailing backslash' do
167
+ def m12
168
+ @x1 = 9 \
169
+ until true
170
+ end
171
+ method(:m12).should.be having_source(%(
172
+ def m12
173
+ @x1 = 9 until true
174
+ end
175
+ ))
176
+ end
177
+
178
+ end
179
+ end
@@ -0,0 +1,179 @@
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 while block" do
5
+
6
+ should 'handle w do' do
7
+ def m1
8
+ while true do @x1 = 1 end
9
+ end
10
+ method(:m1).should.be having_source(%(
11
+ def m1
12
+ while true do @x1 = 1 end
13
+ end
14
+ ))
15
+ end
16
+
17
+ should 'handle w \ do' do
18
+ def m2
19
+ while true \
20
+ do @x1 = 2 end
21
+ end
22
+ method(:m2).should.be having_source(%(
23
+ def m2
24
+ while true do @x1 = 2 end
25
+ end
26
+ ))
27
+ end
28
+
29
+ should 'handle wo do (w newline)' do
30
+ def m3
31
+ while true
32
+ @x1 = 3
33
+ end
34
+ end
35
+ method(:m3).should.be having_source(%(
36
+ def m3
37
+ while true
38
+ @x1 = 3
39
+ end
40
+ end
41
+ ))
42
+ end
43
+
44
+ should 'handle wo do (w semicolon)' do
45
+ def m4
46
+ while true; @x1 = 4; end
47
+ end
48
+ method(:m4).should.be having_source(%(
49
+ def m4
50
+ while true
51
+ @x1 = 4
52
+ end
53
+ end
54
+ ))
55
+ end
56
+
57
+ should 'handle nested wo do within w do' do
58
+ def m5
59
+ while true do
60
+ while true; @x1 = 5; end
61
+ end
62
+ end
63
+ method(:m5).should.be having_source(%(
64
+ def m5
65
+ while true do
66
+ while true
67
+ @x1 = 5
68
+ end
69
+ end
70
+ end
71
+ ))
72
+ end
73
+
74
+ should 'handle nested wo do within wo do' do
75
+ def m6
76
+ while true
77
+ while true; @x1 = 6; end
78
+ end
79
+ end
80
+ method(:m6).should.be having_source(%(
81
+ def m6
82
+ while true
83
+ while true
84
+ @x1 = 6
85
+ end
86
+ end
87
+ end
88
+ ))
89
+ end
90
+
91
+ should 'handle nested w do within wo do' do
92
+ def m7
93
+ while true
94
+ while true do @x1 = 7 end
95
+ end
96
+ end
97
+ method(:m7).should.be having_source(%(
98
+ def m7
99
+ while true
100
+ while true
101
+ @x1 = 7
102
+ end
103
+ end
104
+ end
105
+ ))
106
+ end
107
+
108
+ should 'handle nested w do within w do' do
109
+ def m8
110
+ while true do
111
+ while true do @x1 = 8 end
112
+ end
113
+ end
114
+ method(:m8).should.be having_source(%(
115
+ def m8
116
+ while true
117
+ while true
118
+ @x1 = 8
119
+ end
120
+ end
121
+ end
122
+ ))
123
+ end
124
+
125
+ should 'handle simple modifier' do
126
+ def m9
127
+ @x1 = 9 while true
128
+ end
129
+ method(:m9).should.be having_source(%(
130
+ def m9
131
+ @x1 = 9 while true
132
+ end
133
+ ))
134
+ end
135
+
136
+ should 'handle block within modifier' do
137
+ def m10
138
+ @x1 = 10 while (
139
+ while true do @x1 = 10 end
140
+ )
141
+ end
142
+ method(:m10).should.be having_source(%(
143
+ def m10
144
+ @x1 = 10 while (
145
+ while true do @x1 = 10 end
146
+ )
147
+ end
148
+ ))
149
+ end
150
+
151
+ should 'handle modifier within block' do
152
+ def m11
153
+ while true
154
+ @x1 = 11 while true
155
+ end
156
+ end
157
+ method(:m11).should.be having_source(%(
158
+ def m11
159
+ while true
160
+ @x1 = 11 while true
161
+ end
162
+ end
163
+ ))
164
+ end
165
+
166
+ should 'handle modifier w trailing backslash' do
167
+ def m12
168
+ @x1 = 9 \
169
+ while true
170
+ end
171
+ method(:m12).should.be having_source(%(
172
+ def m12
173
+ @x1 = 9 while true
174
+ end
175
+ ))
176
+ end
177
+
178
+ end
179
+ end