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,317 @@
1
+ %%{
2
+ machine common_machines;
3
+
4
+ ## MACHINE >> One-liner comment
5
+
6
+ per_line_comment := |*
7
+ ^newline* => {
8
+ push(:comment, ts.pred, te)
9
+ fgoto main;
10
+ };
11
+ *|;
12
+
13
+ ## MACHINE >> Block comment
14
+
15
+ block_comment := |*
16
+ any* . newline . '=end' . ospaces . ^newline* => {
17
+ unless push_comment(ts, te)
18
+ fgoto main;
19
+ end
20
+ };
21
+ *|;
22
+
23
+ ## MACHINE >> Heredoc
24
+
25
+ heredoc := |*
26
+ ^newline* . newline . ospaces . ^newline+ => {
27
+ unless push_heredoc(ts, te)
28
+ fgoto main;
29
+ end
30
+ };
31
+ *|;
32
+
33
+ ## MACHINE >> String
34
+
35
+ string := |*
36
+
37
+ sqm = '%q' | '%w';
38
+ dqm = '%Q' | '%W' | '%x' | '%r' | '%';
39
+
40
+ ## == Single quote strings
41
+ sqs1 = "'" . ([^\']* | ([^\'\\]*[\\][\'][^\']*)*) . '\\\\'* . "'";
42
+ sqs2 = '~' . ([^\~]* | ([^\~\\]*[\\][\~][^\~]*)*) . '\\\\'* . '~';
43
+ sqs3 = '`' . ([^\`]* | ([^\`\\]*[\\][\`][^\`]*)*) . '\\\\'* . '`';
44
+ sqs4 = '!' . ([^\!]* | ([^\!\\]*[\\][\!][^\!]*)*) . '\\\\'* . '!';
45
+ sqs5 = '@' . ([^\@]* | ([^\@\\]*[\\][\@][^\@]*)*) . '\\\\'* . '@';
46
+ sqs6 = '#' . ([^\#]* | ([^\#\\]*[\\][\#][^\#]*)*) . '\\\\'* . '#';
47
+ sqs7 = '$' . ([^\$]* | ([^\$\\]*[\\][\$][^\$]*)*) . '\\\\'* . '$';
48
+ sqs8 = '%' . ([^\%]* | ([^\%\\]*[\\][\%][^\%]*)*) . '\\\\'* . '%';
49
+ sqs9 = '^' . ([^\^]* | ([^\^\\]*[\\][\^][^\^]*)*) . '\\\\'* . '^';
50
+ sqs10 = '&' . ([^\&]* | ([^\&\\]*[\\][\&][^\&]*)*) . '\\\\'* . '&';
51
+ sqs11 = '*' . ([^\*]* | ([^\*\\]*[\\][\*][^\*]*)*) . '\\\\'* . '*';
52
+ sqs12 = '-' . ([^\-]* | ([^\-\\]*[\\][\-][^\-]*)*) . '\\\\'* . '-';
53
+ sqs13 = '_' . ([^\_]* | ([^\_\\]*[\\][\_][^\_]*)*) . '\\\\'* . '_';
54
+ sqs14 = '+' . ([^\+]* | ([^\+\\]*[\\][\+][^\+]*)*) . '\\\\'* . '+';
55
+ sqs15 = '=' . ([^\=]* | ([^\=\\]*[\\][\=][^\=]*)*) . '\\\\'* . '=';
56
+ sqs16 = '<' . ([^\>]* | ([^\>\\]*[\\][\>][^\>]*)*) . '\\\\'* . '>';
57
+ sqs17 = '|' . ([^\|]* | ([^\|\\]*[\\][\|][^\|]*)*) . '\\\\'* . '|';
58
+ sqs18 = ':' . ([^\:]* | ([^\:\\]*[\\][\:][^\:]*)*) . '\\\\'* . ':';
59
+ sqs19 = ';' . ([^\;]* | ([^\;\\]*[\\][\;][^\;]*)*) . '\\\\'* . ';';
60
+ sqs20 = '"' . ([^\"]* | ([^\"\\]*[\\][\"][^\"]*)*) . '\\\\'* . '"';
61
+ sqs21 = ',' . ([^\,]* | ([^\,\\]*[\\][\,][^\,]*)*) . '\\\\'* . ',';
62
+ sqs22 = '.' . ([^\.]* | ([^\.\\]*[\\][\.][^\.]*)*) . '\\\\'* . '.';
63
+ sqs23 = '?' . ([^\?]* | ([^\?\\]*[\\][\?][^\?]*)*) . '\\\\'* . '?';
64
+ sqs24 = '/' . ([^\/]* | ([^\/\\]*[\\][\/][^\/]*)*) . '\\\\'* . '/';
65
+ sqs25 = '{' . ([^\}]* | ([^\}\\]*[\\][\}][^\}]*)*) . '\\\\'* . '}';
66
+ sqs26 = '[' . ([^\]]* | ([^\]\\]*[\\][\]][^\]]*)*) . '\\\\'* . ']';
67
+ sqs27 = '(' . ([^\)]* | ([^\)\\]*[\\][\)][^\)]*)*) . '\\\\'* . ')';
68
+ sqs28 = '\\' . ([^\\]* | ([^\)]*[\\][\\][^\\]*)*) . '\\';
69
+
70
+ ( sqs1 | sqm . sqs1 | sqm . sqs2 | sqm . sqs3 | sqm . sqs4 |
71
+ sqm . sqs5 | sqm . sqs6 | sqm . sqs7 | sqm . sqs8 | sqm . sqs9 |
72
+ sqm . sqs10 | sqm . sqs11 | sqm . sqs12 | sqm . sqs13 | sqm . sqs14 |
73
+ sqm . sqs15 | sqm . sqs16 | sqm . sqs17 | sqm . sqs18 | sqm . sqs19 |
74
+ sqm . sqs20 | sqm . sqs21 | sqm . sqs22 | sqm . sqs23 | sqm . sqs24 |
75
+ sqm . sqs25 | sqm . sqs26 | sqm . sqs27 | sqm . sqs28
76
+ ) => {
77
+ push(:sstring, ts, te);
78
+ fgoto main;
79
+ };
80
+
81
+ ## == Double quote strings
82
+ (dqm . '"') | '"' => { push_dstring(ts, te); fgoto dstring1; };
83
+ (dqm . "'") | "'" => { push_dstring(ts, te); fgoto dstring2; };
84
+ (dqm . '/') | '/' => { push_dstring(ts, te); fgoto dstring3; };
85
+ (dqm . '`') | '`' => { push_dstring(ts, te); fgoto dstring4; };
86
+ dqm . '~' => { push_dstring(ts, te); fgoto dstring5; };
87
+ dqm . '!' => { push_dstring(ts, te); fgoto dstring6; };
88
+ dqm . '@' => { push_dstring(ts, te); fgoto dstring7; };
89
+ dqm . '#' => { push_dstring(ts, te); fgoto dstring8; };
90
+ dqm . '$' => { push_dstring(ts, te); fgoto dstring9; };
91
+ dqm . '%' => { push_dstring(ts, te); fgoto dstring10; };
92
+ dqm . '^' => { push_dstring(ts, te); fgoto dstring11; };
93
+ dqm . '&' => { push_dstring(ts, te); fgoto dstring12; };
94
+ dqm . '*' => { push_dstring(ts, te); fgoto dstring13; };
95
+ dqm . '-' => { push_dstring(ts, te); fgoto dstring14; };
96
+ dqm . '_' => { push_dstring(ts, te); fgoto dstring15; };
97
+ dqm . '+' => { push_dstring(ts, te); fgoto dstring16; };
98
+ dqm . '=' => { push_dstring(ts, te); fgoto dstring17; };
99
+ dqm . '<' => { push_dstring(ts, te); fgoto dstring18; };
100
+ dqm . '|' => { push_dstring(ts, te); fgoto dstring19; };
101
+ dqm . ':' => { push_dstring(ts, te); fgoto dstring20; };
102
+ dqm . ';' => { push_dstring(ts, te); fgoto dstring21; };
103
+ dqm . ',' => { push_dstring(ts, te); fgoto dstring22; };
104
+ dqm . '.' => { push_dstring(ts, te); fgoto dstring23; };
105
+ dqm . '?' => { push_dstring(ts, te); fgoto dstring24; };
106
+ dqm . '{' => { push_dstring(ts, te); fgoto dstring25; };
107
+ dqm . '[' => { push_dstring(ts, te); fgoto dstring26; };
108
+ dqm . '(' => { push_dstring(ts, te); fgoto dstring27; };
109
+ dqm . '\\' => { push_dstring(ts, te); fgoto dstring28; };
110
+
111
+ ## == Anything accidentally caught
112
+ any => {
113
+ push(:any, ts, te)
114
+ fgoto main;
115
+ };
116
+ *|;
117
+
118
+ ## MACHINES >> Double quote strings
119
+
120
+ dstring1 := |*
121
+ [^\"]*[\"] => {
122
+ unless push_dstring(ts, te)
123
+ fgoto main;
124
+ end
125
+ };
126
+ *|;
127
+ dstring2 := |*
128
+ [^\']*[\'] => {
129
+ unless push_dstring(ts, te)
130
+ fgoto main;
131
+ end
132
+ };
133
+ *|;
134
+ dstring3 := |*
135
+ [^\/]*[\/] => {
136
+ unless push_dstring(ts, te)
137
+ fgoto main;
138
+ end
139
+ };
140
+ *|;
141
+ dstring4 := |*
142
+ [^\`]*[\`] => {
143
+ unless push_dstring(ts, te)
144
+ fgoto main;
145
+ end
146
+ };
147
+ *|;
148
+ dstring5 := |*
149
+ [^\~]*[\~] => {
150
+ unless push_dstring(ts, te)
151
+ fgoto main;
152
+ end
153
+ };
154
+ *|;
155
+ dstring6 := |*
156
+ [^\!]*[\!] => {
157
+ unless push_dstring(ts, te)
158
+ fgoto main;
159
+ end
160
+ };
161
+ *|;
162
+ dstring7 := |*
163
+ [^\@]*[\@] => {
164
+ unless push_dstring(ts, te)
165
+ fgoto main;
166
+ end
167
+ };
168
+ *|;
169
+ dstring8 := |*
170
+ [^\#]*[\#] => {
171
+ unless push_dstring(ts, te)
172
+ fgoto main;
173
+ end
174
+ };
175
+ *|;
176
+ dstring9 := |*
177
+ [^\$]*[\$] => {
178
+ unless push_dstring(ts, te)
179
+ fgoto main;
180
+ end
181
+ };
182
+ *|;
183
+ dstring10 := |*
184
+ [^\%]*[\%] => {
185
+ unless push_dstring(ts, te)
186
+ fgoto main;
187
+ end
188
+ };
189
+ *|;
190
+ dstring11 := |*
191
+ [^\^]*[\^] => {
192
+ unless push_dstring(ts, te)
193
+ fgoto main;
194
+ end
195
+ };
196
+ *|;
197
+ dstring12 := |*
198
+ [^\&]*[\&] => {
199
+ unless push_dstring(ts, te)
200
+ fgoto main;
201
+ end
202
+ };
203
+ *|;
204
+ dstring13 := |*
205
+ [^\*]*[\*] => {
206
+ unless push_dstring(ts, te)
207
+ fgoto main;
208
+ end
209
+ };
210
+ *|;
211
+ dstring14 := |*
212
+ [^\-]*[\-] => {
213
+ unless push_dstring(ts, te)
214
+ fgoto main;
215
+ end
216
+ };
217
+ *|;
218
+ dstring15 := |*
219
+ [^\_]*[\_] => {
220
+ unless push_dstring(ts, te)
221
+ fgoto main;
222
+ end
223
+ };
224
+ *|;
225
+ dstring16 := |*
226
+ [^\+]*[\+] => {
227
+ unless push_dstring(ts, te)
228
+ fgoto main;
229
+ end
230
+ };
231
+ *|;
232
+ dstring17 := |*
233
+ [^\=]*[\=] => {
234
+ unless push_dstring(ts, te)
235
+ fgoto main;
236
+ end
237
+ };
238
+ *|;
239
+ dstring18 := |*
240
+ [^\>]*[\>] => {
241
+ unless push_dstring(ts, te)
242
+ fgoto main;
243
+ end
244
+ };
245
+ *|;
246
+ dstring19 := |*
247
+ [^\|]*[\|] => {
248
+ unless push_dstring(ts, te)
249
+ fgoto main;
250
+ end
251
+ };
252
+ *|;
253
+ dstring20 := |*
254
+ [^\:]*[\:] => {
255
+ unless push_dstring(ts, te)
256
+ fgoto main;
257
+ end
258
+ };
259
+ *|;
260
+ dstring21 := |*
261
+ [^\;]*[\;] => {
262
+ unless push_dstring(ts, te)
263
+ fgoto main;
264
+ end
265
+ };
266
+ *|;
267
+ dstring22 := |*
268
+ [^\,]*[\,] => {
269
+ unless push_dstring(ts, te)
270
+ fgoto main;
271
+ end
272
+ };
273
+ *|;
274
+ dstring23 := |*
275
+ [^\.]*[\.] => {
276
+ unless push_dstring(ts, te)
277
+ fgoto main;
278
+ end
279
+ };
280
+ *|;
281
+ dstring24 := |*
282
+ [^\?]*[\?] => {
283
+ unless push_dstring(ts, te)
284
+ fgoto main;
285
+ end
286
+ };
287
+ *|;
288
+ dstring25 := |*
289
+ [^\}]*[\}] => {
290
+ unless push_dstring(ts, te)
291
+ fgoto main;
292
+ end
293
+ };
294
+ *|;
295
+ dstring26 := |*
296
+ [^\]]*[\]] => {
297
+ unless push_dstring(ts, te)
298
+ fgoto main;
299
+ end
300
+ };
301
+ *|;
302
+ dstring27 := |*
303
+ [^\)]*[\)] => {
304
+ unless push_dstring(ts, te)
305
+ fgoto main;
306
+ end
307
+ };
308
+ *|;
309
+ dstring28 := |*
310
+ [^\\]*[\\] => {
311
+ unless push_dstring(ts, te)
312
+ fgoto main;
313
+ end
314
+ };
315
+ *|;
316
+
317
+ }%%
@@ -0,0 +1,4 @@
1
+ module Sourcify
2
+ class ParserInternalError < Exception; end
3
+ class CannotParseEvalCodeError < Exception; end
4
+ end
@@ -0,0 +1,138 @@
1
+ module Sourcify
2
+
3
+ class MultipleMatchingMethodsPerLineError < Exception; end
4
+ class NoMatchingMethodError < Exception; end
5
+ class CannotFindSourceLocationError < Exception; end
6
+ class PlatformNotSupportedError < Exception; end
7
+
8
+ IS_PLATFORM_SUPPORTED =
9
+ begin
10
+ [:source_location, :parameters].each{|meth| 1.method(:to_s).send(meth) }
11
+ raise PlatformNotSupportedError if RUBY_PLATFORM =~ /java/i
12
+ true
13
+ rescue NoMethodError, PlatformNotSupportedError
14
+ false
15
+ end
16
+
17
+ module Method
18
+
19
+ def self.included(base) #:nodoc:
20
+ base.class_eval do
21
+ Sourcify.require_rb('method', 'methods')
22
+ include Methods::ToSource
23
+ include Methods::ToSexp
24
+ include Methods::ToRawSource
25
+ end
26
+ end
27
+
28
+ module Stubs
29
+
30
+ ###
31
+ # Returns the code representation of this method. Unlike Method#to_raw_source,
32
+ # the returned code retains only the functional aspects, fluff like comments
33
+ # are stripped off.
34
+ #
35
+ # class MyMath
36
+ # def self.sum(x, y)
37
+ # x + y # (blah)
38
+ # end
39
+ # end
40
+ #
41
+ # MyMath.method(:sum).to_source
42
+ # # >> "def sum(x, y)
43
+ # # >> (x + y)
44
+ # # >> end"
45
+ #
46
+ # This works for method defined via Module#define_method as well. The following
47
+ # approach of defining method yields exactly the same result as above:
48
+ #
49
+ # class MyMath
50
+ # class << self
51
+ # define_method(:sum) do |x,y|
52
+ # x + y # (blah)
53
+ # end
54
+ # end
55
+ # end
56
+ #
57
+ # MyMath.method(:sum).to_source
58
+ # # >> "def sum(x, y)
59
+ # # >> (x + y)
60
+ # # >> end"
61
+ #
62
+ # The following options are supported:
63
+ #
64
+ # * +:strip_enclosure+ when set to true, strips the method enclosure to get
65
+ # just the meat within.
66
+ #
67
+ # MyMath.method(:sum).to_source(:strip_enclosure => true)
68
+ # # >> "(x + y)"
69
+ #
70
+ # * +:attached_to+ is useful ONLY when a method is defined via
71
+ # Module#define_method, pls see Sourcify::Proc::Stubs#to_source for more info.
72
+ #
73
+ # * +:ignore_nested+ is useful ONLY when a method is defined via
74
+ # Module#define_method, pls see Sourcify::Proc::Stubs#to_source for more info.
75
+ #
76
+ # * an optional +body_matcher+ block is supported as well, again this is ONLY
77
+ # useful for method defined via Module#define_method, pls see
78
+ # Sourcify::Proc::Stubs#to_source for more info.
79
+ #
80
+ def to_source(opts={}, &body_matcher)
81
+ # NOTE: this is a stub for the actual one in Methods::ToSource
82
+ end
83
+
84
+ ###
85
+ # Returns the S-expression representation of this method.
86
+ #
87
+ # class MyMath
88
+ # def self.sum(x, y)
89
+ # x + y # (blah)
90
+ # end
91
+ # end
92
+ #
93
+ # MyMath.method(:sum).to_sexp
94
+ # >> s(:defn,
95
+ # >> :sum,
96
+ # >> s(:args, :x, :y),
97
+ # >> s(:scope, s(:block, s(:call, s(:lvar, :x), :+, s(:arglist, s(:lvar, :y))))))
98
+ #
99
+ # This works for methods defined via Module#define_method as well. Pls see
100
+ # #to_source for options/arguments supported.
101
+ #
102
+ def to_sexp(opts={}, &body_matcher)
103
+ # NOTE: this is a stub for the actual one in Methods::ToSexp
104
+ end
105
+
106
+ ###
107
+ # Returns the raw code enclosed within this method.
108
+ #
109
+ # class MyMath
110
+ # def self.sum(x, y)
111
+ # x + y # (blah)
112
+ # end
113
+ # end
114
+ #
115
+ # MyMath.method(:sum).to_raw_source
116
+ # >> "def sum(x, y)
117
+ # >> x + y # (blah)
118
+ # >> end"
119
+ #
120
+ # This works for methods defined via Module#define_method as well. Pls see
121
+ # #to_source for options/arguments supported.
122
+ #
123
+ def to_raw_source(opts={}, &body_matcher)
124
+ # NOTE: this is a stub for the actual one in Methods::ToRawSource
125
+ end
126
+
127
+ end
128
+
129
+ end
130
+ end
131
+
132
+ Method.class_eval do
133
+ include Sourcify::Method
134
+ end
135
+
136
+ UnboundMethod.class_eval do
137
+ include Sourcify::Method
138
+ end