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 "Proc#to_source from do ... end block (w nested do ... end block)" do
4
+
5
+ should 'handle simple' do
6
+ (
7
+ lambda do
8
+ lambda do @x1 = 1 end
9
+ end
10
+ ).should.be having_source(%Q\
11
+ proc do
12
+ lambda { @x1 = 1 }
13
+ end
14
+ \)
15
+ end
16
+
17
+ should 'handle nested' do
18
+ (
19
+ lambda do
20
+ lambda do
21
+ lambda do @x1 = 1 end
22
+ end
23
+ end
24
+ ).should.be having_source(%Q\
25
+ proc do
26
+ lambda do
27
+ lambda { @x1 = 1 }
28
+ end
29
+ end
30
+ \)
31
+ end
32
+
33
+ end
@@ -0,0 +1,132 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_source from do ... end block (w nested for block)" do
4
+
5
+ should 'handle w do' do
6
+ (
7
+ lambda do
8
+ for x1 in [1,2] do x1 end
9
+ end
10
+ ).should.be having_source(%Q\
11
+ proc do
12
+ for x1 in [1,2] do x1 end
13
+ end
14
+ \)
15
+ end
16
+
17
+ should 'handle w \ do' do
18
+ (
19
+ lambda do
20
+ for x2 in [1,2] \
21
+ do x2 end
22
+ end
23
+ ).should.be having_source(%Q\
24
+ proc do
25
+ for x2 in [1,2] do x2 end
26
+ end
27
+ \)
28
+ end
29
+
30
+ should 'handle wo do (w newline)' do
31
+ (
32
+ lambda do
33
+ for x3 in [1,2]
34
+ x3
35
+ end
36
+ end
37
+ ).should.be having_source(%Q\
38
+ proc do
39
+ for x3 in [1,2]
40
+ x3
41
+ end
42
+ end
43
+ \)
44
+ end
45
+
46
+ should 'handle wo do (w semicolon)' do
47
+ (
48
+ lambda do
49
+ for x4 in [1,2]; x4; end
50
+ end
51
+ ).should.be having_source(%Q\
52
+ proc do
53
+ for x4 in [1,2]
54
+ x4
55
+ end
56
+ end
57
+ \)
58
+ end
59
+
60
+ should 'handle nested wo do within w do' do
61
+ (
62
+ lambda do
63
+ for x1 in [1,2] do
64
+ for x2 in [1,2]
65
+ x2
66
+ end
67
+ end
68
+ end
69
+ ).should.be having_source(%Q\
70
+ proc do
71
+ for x1 in [1,2] do
72
+ for x2 in [1,2]
73
+ x2
74
+ end
75
+ end
76
+ end
77
+ \)
78
+ end
79
+
80
+ should 'handle nested wo do within wo do' do
81
+ (
82
+ lambda do
83
+ for x1 in [2,3]
84
+ for x2 in [2,3]
85
+ x2
86
+ end
87
+ end
88
+ end
89
+ ).should.be having_source(%Q\
90
+ proc do
91
+ for x1 in [2,3] do
92
+ for x2 in [2,3]
93
+ x2
94
+ end
95
+ end
96
+ end
97
+ \)
98
+ end
99
+
100
+ should 'handle nested w do within wo do' do
101
+ (
102
+ lambda do
103
+ for x1 in [3,4]
104
+ for x2 in [3,4] do x2 end
105
+ end
106
+ end
107
+ ).should.be having_source(%Q\
108
+ proc do
109
+ for x1 in [3,4]
110
+ for x2 in [3,4] do x2 end
111
+ end
112
+ end
113
+ \)
114
+ end
115
+
116
+ should 'handle nested w do within w do' do
117
+ (
118
+ lambda do
119
+ for x1 in [4,5] \
120
+ do for x2 in [4,5] do x2 end
121
+ end
122
+ end
123
+ ).should.be having_source(%Q\
124
+ proc do
125
+ for x1 in [4,5]
126
+ for x2 in [4,5] do x2 end
127
+ end
128
+ end
129
+ \)
130
+ end
131
+
132
+ end
@@ -0,0 +1,87 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_source from do ... end block (w nested if)" do
4
+
5
+ should 'handle simple block' do
6
+ (
7
+ lambda do
8
+ if @x1 then @x1 = 1 end
9
+ end
10
+ ).should.be having_source(%Q\
11
+ proc do
12
+ if @x1 then @x1 = 1 end
13
+ end
14
+ \)
15
+ end
16
+
17
+ should 'handle nested block' do
18
+ (
19
+ lambda do
20
+ if @x1
21
+ if @x2 then @x2 = 1 end
22
+ end
23
+ end
24
+ ).should.be having_source(%Q\
25
+ proc do
26
+ if @x1
27
+ if @x2 then @x2 = 1 end
28
+ end
29
+ end
30
+ \)
31
+ end
32
+
33
+ should 'handle simple modifier' do
34
+ (
35
+ lambda do
36
+ @x1 = 1 if true
37
+ end
38
+ ).should.be having_source(%Q\
39
+ proc do
40
+ @x1 = 1 if true
41
+ end
42
+ \)
43
+ end
44
+
45
+ # NOTE: Syntatically correct, but the RubyParser-2.3.* can't handle it.
46
+ # should 'handle block within modifier' do
47
+ # (
48
+ # lambda do
49
+ # @x1 = 1 if (if @x1 then true end)
50
+ # end
51
+ # ).should.be having_source(%Q\
52
+ # proc do
53
+ # @x1 = 1 if (if @x1 then true end)
54
+ # end
55
+ # \)
56
+ # end
57
+
58
+ should 'handle modifier w trailing backslash' do
59
+ (
60
+ lambda do
61
+ @x1 = 1 \
62
+ if true
63
+ end
64
+ ).should.be having_source(%Q\
65
+ proc do
66
+ @x1 = 1 if true
67
+ end
68
+ \)
69
+ end
70
+
71
+ should 'handle modifier within block' do
72
+ (
73
+ lambda do
74
+ if @x1
75
+ @x1 = 1 if @x2
76
+ end
77
+ end
78
+ ).should.be having_source(%Q\
79
+ proc do
80
+ if @x1
81
+ @x1 = 1 if @x2
82
+ end
83
+ end
84
+ \)
85
+ end
86
+
87
+ end
@@ -0,0 +1,103 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_source from do ... end block (w nested literal keyword)" do
4
+
5
+ # See http://redmine.ruby-lang.org/issues/show/3764
6
+
7
+ should 'handle :class' do
8
+ (
9
+ lambda do
10
+ x = :class
11
+ end
12
+ ).should.be having_source('proc { x = :class }')
13
+ end
14
+
15
+ should 'handle :module' do
16
+ (
17
+ lambda do
18
+ x = :module
19
+ end
20
+ ).should.be having_source('proc { x = :module }')
21
+ end
22
+
23
+ should 'handle :def' do
24
+ (
25
+ lambda do
26
+ x = :def
27
+ end
28
+ ).should.be having_source('proc { x = :def }')
29
+ end
30
+
31
+ should 'handle :if' do
32
+ (
33
+ lambda do
34
+ x = :if
35
+ end
36
+ ).should.be having_source('proc { x = :if }')
37
+ end
38
+
39
+ should 'handle :unless' do
40
+ (
41
+ lambda do
42
+ x = :unless
43
+ end
44
+ ).should.be having_source('proc { x = :unless }')
45
+ end
46
+
47
+ should 'handle :for' do
48
+ (
49
+ lambda do
50
+ x = :for
51
+ end
52
+ ).should.be having_source('proc { x = :for }')
53
+ end
54
+
55
+ should 'handle :while' do
56
+ (
57
+ lambda do
58
+ x = :while
59
+ end
60
+ ).should.be having_source('proc { x = :while }')
61
+ end
62
+
63
+ should 'handle :until' do
64
+ (
65
+ lambda do
66
+ x = :until
67
+ end
68
+ ).should.be having_source('proc { x = :until }')
69
+ end
70
+
71
+ should 'handle :begin' do
72
+ (
73
+ lambda do
74
+ x = :begin
75
+ end
76
+ ).should.be having_source('proc { x = :begin }')
77
+ end
78
+
79
+ should 'handle :case' do
80
+ (
81
+ lambda do
82
+ x = :case
83
+ end
84
+ ).should.be having_source('proc { x = :case }')
85
+ end
86
+
87
+ should 'handle :do' do
88
+ (
89
+ lambda do
90
+ x = :do
91
+ end
92
+ ).should.be having_source('proc { x = :do }')
93
+ end
94
+
95
+ should 'handle :end' do
96
+ (
97
+ lambda do
98
+ x = :end
99
+ end
100
+ ).should.be having_source('proc { x = :end }')
101
+ end
102
+
103
+ end
@@ -0,0 +1,33 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_source from do ... end block (w nested method)" do
4
+
5
+ should 'handle simple' do
6
+ (
7
+ lambda do
8
+ def aa; x = 1; end
9
+ end
10
+ ).should.be having_source(%Q\
11
+ proc do
12
+ def aa; x = 1; end
13
+ end
14
+ \)
15
+ end
16
+
17
+ should 'handle nested' do
18
+ (
19
+ lambda do
20
+ def aa
21
+ def bb; x = 2; end
22
+ end
23
+ end
24
+ ).should.be having_source(%Q\
25
+ proc do
26
+ def aa
27
+ def bb; x = 2; end
28
+ end
29
+ end
30
+ \)
31
+ end
32
+
33
+ end
@@ -0,0 +1,49 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_source from do ... end block (w nested module)" do
4
+
5
+ should 'handle simple' do
6
+ (
7
+ lambda do
8
+ module AA
9
+ def aa
10
+ @x1 = 1
11
+ end
12
+ end
13
+ end
14
+ ).should.be having_source(%Q\
15
+ proc do
16
+ module AA
17
+ def aa
18
+ @x1 = 1
19
+ end
20
+ end
21
+ end
22
+ \)
23
+ end
24
+
25
+ should 'handle nested' do
26
+ (
27
+ lambda do
28
+ module AA
29
+ module BB
30
+ def bb
31
+ @x1 = 1
32
+ end
33
+ end
34
+ end
35
+ end
36
+ ).should.be having_source(%Q\
37
+ proc do
38
+ module AA
39
+ module BB
40
+ def bb
41
+ @x1 = 1
42
+ end
43
+ end
44
+ end
45
+ end
46
+ \)
47
+ end
48
+
49
+ end
@@ -0,0 +1,87 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_source from do ... end block (w nested unless)" do
4
+
5
+ should 'handle simple block' do
6
+ (
7
+ lambda do
8
+ unless @x1 then @x1 = 1 end
9
+ end
10
+ ).should.be having_source(%Q\
11
+ proc do
12
+ unless @x1 then @x1 = 1 end
13
+ end
14
+ \)
15
+ end
16
+
17
+ should 'handle nested block' do
18
+ (
19
+ lambda do
20
+ unless @x1
21
+ unless @x2 then @x2 = 1 end
22
+ end
23
+ end
24
+ ).should.be having_source(%Q\
25
+ proc do
26
+ unless @x1
27
+ unless @x2 then @x2 = 1 end
28
+ end
29
+ end
30
+ \)
31
+ end
32
+
33
+ should 'handle simple modifier' do
34
+ (
35
+ lambda do
36
+ @x1 = 1 unless true
37
+ end
38
+ ).should.be having_source(%Q\
39
+ proc do
40
+ @x1 = 1 unless true
41
+ end
42
+ \)
43
+ end
44
+
45
+ # NOTE: Syntatically correct, but the RubyParser-2.3.* can't handle it.
46
+ # should 'handle block within modifier' do
47
+ # (
48
+ # lambda do
49
+ # @x1 = 1 unless (unless @x1 then true end)
50
+ # end
51
+ # ).should.be having_source(%Q\
52
+ # proc do
53
+ # @x1 = 1 unless (unless @x1 then true end)
54
+ # end
55
+ # \)
56
+ # end
57
+
58
+ should 'handle modifier within block' do
59
+ (
60
+ lambda do
61
+ unless @x1
62
+ @x1 = 1 unless @x2
63
+ end
64
+ end
65
+ ).should.be having_source(%Q\
66
+ proc do
67
+ unless @x1
68
+ @x1 = 1 unless @x2
69
+ end
70
+ end
71
+ \)
72
+ end
73
+
74
+ should 'handle modifier w trailing backslash' do
75
+ (
76
+ lambda do
77
+ @x1 = 1 \
78
+ unless true
79
+ end
80
+ ).should.be having_source(%Q\
81
+ proc do
82
+ @x1 = 1 unless true
83
+ end
84
+ \)
85
+ end
86
+
87
+ end