ikra 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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