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,149 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_sexp within PRY" do
4
+
5
+ class << self
6
+
7
+ def pry_eval(string)
8
+ pry_exec(string)[-1]
9
+ end
10
+
11
+ def equal_to(expected)
12
+ lambda {|found| found == expected }
13
+ end
14
+
15
+ end
16
+
17
+ should 'handle non var' do
18
+ expected = s(:iter, s(:call, nil, :proc, s(:arglist)), nil, s(:call, nil, :x, s(:arglist)))
19
+ pry_eval(%Q(
20
+ # NOTE: this line is needed to fix one-liner issue w pry
21
+ lambda { x }.to_sexp
22
+ )).should.be equal_to(expected)
23
+ end
24
+
25
+ should 'handle local var' do
26
+ expected = s(:iter, s(:call, nil, :proc, s(:arglist)), nil, s(:lvar, :x))
27
+ pry_eval(%Q(
28
+ x = 'lx'
29
+ lambda { x }.to_sexp
30
+ )).should.be equal_to(expected)
31
+ end
32
+
33
+ should 'handle class_eval scoped local var' do
34
+ expected =
35
+ s(:iter,
36
+ s(:call, nil, :proc, s(:arglist)),
37
+ nil,
38
+ s(:iter,
39
+ s(:call, s(:const, :Object), :class_eval, s(:arglist)),
40
+ s(:lasgn, :x),
41
+ s(:lasgn, :y, s(:lvar, :x))))
42
+ pry_eval(%Q(
43
+ x = 1
44
+ lambda { Object.class_eval {|x| y = x } }.to_sexp
45
+ )).should.be equal_to(expected)
46
+ end
47
+
48
+ should 'handle instance_eval scoped local var' do
49
+ expected =
50
+ s(:iter,
51
+ s(:call, nil, :proc, s(:arglist)),
52
+ nil,
53
+ s(:iter,
54
+ s(:call, s(:str, "aa"), :instance_eval, s(:arglist)),
55
+ s(:lasgn, :x),
56
+ s(:lasgn, :y, s(:lvar, :x))))
57
+ pry_eval(%Q(
58
+ x = 1
59
+ lambda { 'aa'.instance_eval {|x| y = x } }.to_sexp
60
+ )).should.be equal_to(expected)
61
+ end
62
+
63
+ should 'handle define_method scoped local var' do
64
+ expected =
65
+ s(:iter,
66
+ s(:call, nil, :proc, s(:arglist)),
67
+ nil,
68
+ s(:iter,
69
+ s(:call,
70
+ s(:const, :Object),
71
+ :send,
72
+ s(:arglist, s(:lit, :define_method), s(:lit, :aa))),
73
+ s(:lasgn, :x),
74
+ s(:lasgn, :y, s(:lvar, :x))))
75
+ pry_eval(%Q(
76
+ x = 1
77
+ lambda { Object.send(:define_method, :aa) {|x| y = x } }.to_sexp
78
+ )).should.be equal_to(expected)
79
+ end
80
+
81
+ should 'not handle class scoped local var (simple)' do
82
+ expected =
83
+ s(:iter,
84
+ s(:call, nil, :proc, s(:arglist)),
85
+ nil,
86
+ s(:class, :AA, nil, s(:scope, s(:lasgn, :y, s(:call, nil, :x, s(:arglist))))))
87
+ pry_eval(%Q(
88
+ x = 1
89
+ lambda { class AA ; y = x ; end }.to_sexp
90
+ )).should.be equal_to(expected)
91
+ end
92
+
93
+ should 'not handle class scoped local var (w inheritance)' do
94
+ expected =
95
+ s(:iter,
96
+ s(:call, nil, :proc, s(:arglist)),
97
+ nil,
98
+ s(:class,
99
+ :AA,
100
+ s(:const, :Object),
101
+ s(:scope, s(:lasgn, :y, s(:call, nil, :x, s(:arglist))))))
102
+ pry_eval(%Q(
103
+ x = 1
104
+ lambda { class AA < Object; y = x ; end }.to_sexp
105
+ )).should.be equal_to(expected)
106
+ end
107
+
108
+ should 'not handle class scoped local var (w singleton)' do
109
+ expected =
110
+ s(:iter,
111
+ s(:call, nil, :proc, s(:arglist)),
112
+ nil,
113
+ s(:sclass,
114
+ s(:str, "AA"),
115
+ s(:scope, s(:lasgn, :y, s(:call, nil, :x, s(:arglist))))))
116
+ pry_eval(%Q(
117
+ x = 1
118
+ lambda { class << 'AA'; y = x ; end }.to_sexp
119
+ )).should.be equal_to(expected)
120
+ end
121
+
122
+ should 'not handle module scoped local var' do
123
+ expected =
124
+ s(:iter,
125
+ s(:call, nil, :proc, s(:arglist)),
126
+ nil,
127
+ s(:module, :AA, s(:scope, s(:lasgn, :y, s(:call, nil, :x, s(:arglist))))))
128
+ pry_eval(%Q(
129
+ x = 1
130
+ lambda { module AA ; y = x ; end }.to_sexp
131
+ )).should.be equal_to(expected)
132
+ end
133
+
134
+ should 'not handle method scoped local var' do
135
+ expected =
136
+ s(:iter,
137
+ s(:call, nil, :proc, s(:arglist)),
138
+ nil,
139
+ s(:defn,
140
+ :aa,
141
+ s(:args),
142
+ s(:scope, s(:block, s(:lasgn, :y, s(:call, nil, :x, s(:arglist)))))))
143
+ pry_eval(%Q(
144
+ x = 1
145
+ lambda { def aa ; y = x ; end }.to_sexp
146
+ )).should.be equal_to(expected)
147
+ end
148
+
149
+ end
@@ -0,0 +1,33 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_source from { ... } block (w nested { ... } block)" do
4
+
5
+ should 'handle simple' do
6
+ (
7
+ lambda {
8
+ lambda { @x1 = 1 }
9
+ }
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 {
20
+ lambda {
21
+ lambda { @x1 = 1 }
22
+ }
23
+ }
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,82 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_source from { ... } block (w nested hash)" do
4
+
5
+ should 'handle simple' do
6
+ (
7
+ lambda {
8
+ {:a => 1, :b => 2}
9
+ }
10
+ ).should.be having_source(%Q\
11
+ proc do
12
+ {:a => 1, :b => 2}
13
+ end
14
+ \)
15
+ end
16
+
17
+ should 'handle nested' do
18
+ (
19
+ lambda {
20
+ {:a => 1, :b => {:c => 3}}
21
+ }
22
+ ).should.be having_source(%Q\
23
+ proc do
24
+ {:a => 1, :b => {:c => 3}}
25
+ end
26
+ \)
27
+ end
28
+
29
+ should 'handle method w only hash args (wo parens)' do
30
+ (
31
+ lambda {
32
+ test :a => 2
33
+ }
34
+ ).should.be having_source(%Q\
35
+ proc do
36
+ test(:a => 2)
37
+ end
38
+ \)
39
+ end
40
+
41
+ should 'handle method w only hash args (w parens)' do
42
+ (
43
+ lambda {
44
+ test(:a => 2)
45
+ }
46
+ ).should.be having_source(%Q\
47
+ proc do
48
+ test(:a => 2)
49
+ end
50
+ \)
51
+ end
52
+
53
+ should 'handle method w mixed args (wo parens)' do
54
+ (
55
+ lambda {
56
+ test 1, :a => 2
57
+ }
58
+ ).should.be having_source(%Q\
59
+ proc do
60
+ test(1, :a => 2)
61
+ end
62
+ \)
63
+ end
64
+
65
+ should 'handle method w mixed args (w parens)' do
66
+ (
67
+ lambda {
68
+ test(1, :a => 2)
69
+ }
70
+ ).should.be having_source(%Q\
71
+ proc do
72
+ test(1, :a => 2)
73
+ end
74
+ \)
75
+ end
76
+
77
+ if RUBY_VERSION.include?('1.9.')
78
+ require File.join(File.expand_path(File.dirname(__FILE__)), '19x_extras')
79
+ behaves_like 'Proc#to_source from { ... } block (1.9.*)'
80
+ end
81
+
82
+ end
@@ -0,0 +1,46 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_source from { ... } block (wo nesting complication)" do
4
+
5
+ expected = 'proc { @x%s }'
6
+
7
+ should 'handle watever(..) { ... }' do
8
+ (
9
+ watever(:a, :b, {:c => 1}) { @x1 }
10
+ ).should.be having_source(expected%1)
11
+ end
12
+
13
+ should 'handle watever(..) \ { ... }' do
14
+ (
15
+ watever(:a, :b, {:c => 1}) \
16
+ { @x2 }
17
+ ).should.be having_source(expected%2)
18
+ end
19
+
20
+ should 'handle watever { ... }' do
21
+ (
22
+ watever { @x3 }
23
+ ).should.be having_source(expected%3)
24
+ end
25
+
26
+ should 'handle watever \ { ... }' do
27
+ (
28
+ watever \
29
+ { @x4 }
30
+ ).should.be having_source(expected%4)
31
+ end
32
+
33
+ should 'handle lambda { ... }' do
34
+ (
35
+ lambda { @x5 }
36
+ ).should.be having_source(expected%5)
37
+ end
38
+
39
+ should 'handle lambda \ { ... }' do
40
+ (
41
+ lambda \
42
+ { @x6 }
43
+ ).should.be having_source(expected%6)
44
+ end
45
+
46
+ end
@@ -0,0 +1,35 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_source from do ... end block (w nested begin)" do
4
+
5
+ should 'handle simple' do
6
+ (
7
+ lambda do
8
+ begin @x1 = 1 end
9
+ end
10
+ ).should.be having_source(%Q\
11
+ proc do
12
+ begin @x1 = 1 end
13
+ end
14
+ \)
15
+ end
16
+
17
+ should 'handle nested' do
18
+ (
19
+ lambda do
20
+ begin
21
+ @x1 = 1
22
+ begin @x2 = 2 end
23
+ end
24
+ end
25
+ ).should.be having_source(%Q\
26
+ proc do
27
+ begin
28
+ @x1 = 1
29
+ begin @x2 = 2 end
30
+ end
31
+ end
32
+ \)
33
+ end
34
+
35
+ end
@@ -0,0 +1,35 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_source from do ... end block (w nested case)" do
4
+
5
+ should 'handle simple' do
6
+ (
7
+ lambda do
8
+ case @x1 when true then false end
9
+ end
10
+ ).should.be having_source(%Q\
11
+ proc do
12
+ case @x1 when true then false end
13
+ end
14
+ \)
15
+ end
16
+
17
+ should 'handle nested' do
18
+ (
19
+ lambda do
20
+ case @x1
21
+ when true
22
+ case @x2 when false then true end
23
+ end
24
+ end
25
+ ).should.be having_source(%Q\
26
+ proc do
27
+ case @x1
28
+ when true
29
+ case @x2 when false then true end
30
+ end
31
+ end
32
+ \)
33
+ end
34
+
35
+ end
@@ -0,0 +1,89 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Proc#to_source from do ... end block (w nested class)" do
4
+
5
+ should 'handle simple' do
6
+ (
7
+ lambda do
8
+ class AA
9
+ def aa
10
+ @x1 = 1
11
+ end
12
+ end
13
+ end
14
+ ).should.be having_source(%Q\
15
+ proc do
16
+ class AA
17
+ def aa
18
+ @x1 = 1
19
+ end
20
+ end
21
+ end
22
+ \)
23
+ end
24
+
25
+ should 'handle inheritance' do
26
+ (
27
+ lambda do
28
+ class AA < Object
29
+ def aa
30
+ @x1 = 1
31
+ end
32
+ end
33
+ end
34
+ ).should.be having_source(%Q\
35
+ proc do
36
+ class AA < Object
37
+ def aa
38
+ @x1 = 1
39
+ end
40
+ end
41
+ end
42
+ \)
43
+ end
44
+
45
+ should 'handle singleton' do
46
+ (
47
+ lambda do
48
+ class << 'AA'
49
+ def aa
50
+ @x1 = 1
51
+ end
52
+ end
53
+ end
54
+ ).should.be having_source(%Q\
55
+ proc do
56
+ class << 'AA'
57
+ def aa
58
+ @x1 = 1
59
+ end
60
+ end
61
+ end
62
+ \)
63
+ end
64
+
65
+ should 'handle nested' do
66
+ (
67
+ lambda do
68
+ class AA
69
+ class BB
70
+ def bb
71
+ @x1 = 1
72
+ end
73
+ end
74
+ end
75
+ end
76
+ ).should.be having_source(%Q\
77
+ proc do
78
+ class AA
79
+ class BB
80
+ def bb
81
+ @x1 = 1
82
+ end
83
+ end
84
+ end
85
+ end
86
+ \)
87
+ end
88
+
89
+ end