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.
- checksums.yaml +7 -0
- data/lib/ast/builder.rb +100 -0
- data/lib/ast/lexical_variables_enumerator.rb +34 -0
- data/lib/ast/method_definition.rb +37 -0
- data/lib/ast/nodes.rb +208 -0
- data/lib/ast/printer.rb +99 -0
- data/lib/ast/translator.rb +264 -0
- data/lib/ast/visitor.rb +173 -0
- data/lib/config/configuration.rb +18 -0
- data/lib/config/os_configuration.rb +56 -0
- data/lib/entity.rb +11 -0
- data/lib/ikra.rb +7 -0
- data/lib/parsing.rb +32 -0
- data/lib/resources/cuda/block_function_head.cpp +1 -0
- data/lib/resources/cuda/env_builder_copy_array.cpp +4 -0
- data/lib/resources/cuda/header.cpp +46 -0
- data/lib/resources/cuda/kernel.cpp +8 -0
- data/lib/resources/cuda/kernel_launcher.cpp +28 -0
- data/lib/resources/cuda/soa_header.cpp +4 -0
- data/lib/scope.rb +166 -0
- data/lib/sourcify/Gemfile +10 -0
- data/lib/sourcify/HISTORY.txt +88 -0
- data/lib/sourcify/LICENSE +20 -0
- data/lib/sourcify/README.rdoc +352 -0
- data/lib/sourcify/Rakefile +111 -0
- data/lib/sourcify/lib/sourcify.rb +44 -0
- data/lib/sourcify/lib/sourcify/common/parser/converter.rb +29 -0
- data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/comment.rb +23 -0
- data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/counter.rb +43 -0
- data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/dstring.rb +58 -0
- data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/extensions.rb +140 -0
- data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/heredoc.rb +26 -0
- data/lib/sourcify/lib/sourcify/common/parser/source_code.rb +45 -0
- data/lib/sourcify/lib/sourcify/common/ragel/common.rl +5 -0
- data/lib/sourcify/lib/sourcify/common/ragel/expressions.rl +38 -0
- data/lib/sourcify/lib/sourcify/common/ragel/machines.rl +317 -0
- data/lib/sourcify/lib/sourcify/errors.rb +4 -0
- data/lib/sourcify/lib/sourcify/method.rb +138 -0
- data/lib/sourcify/lib/sourcify/method/methods.rb +3 -0
- data/lib/sourcify/lib/sourcify/method/methods/to_raw_source.rb +30 -0
- data/lib/sourcify/lib/sourcify/method/methods/to_sexp.rb +30 -0
- data/lib/sourcify/lib/sourcify/method/methods/to_source.rb +30 -0
- data/lib/sourcify/lib/sourcify/method/parser.rb +110 -0
- data/lib/sourcify/lib/sourcify/method/parser/converter.rb +8 -0
- data/lib/sourcify/lib/sourcify/method/parser/raw_scanner.rb +2494 -0
- data/lib/sourcify/lib/sourcify/method/parser/raw_scanner.rl +144 -0
- data/lib/sourcify/lib/sourcify/method/parser/raw_scanner_extensions.rb +68 -0
- data/lib/sourcify/lib/sourcify/method/parser/scanner.rb +52 -0
- data/lib/sourcify/lib/sourcify/method/parser/source_code.rb +8 -0
- data/lib/sourcify/lib/sourcify/patches.rb +63 -0
- data/lib/sourcify/lib/sourcify/proc.rb +183 -0
- data/lib/sourcify/lib/sourcify/proc/methods.rb +3 -0
- data/lib/sourcify/lib/sourcify/proc/methods/source_location.rb +61 -0
- data/lib/sourcify/lib/sourcify/proc/methods/to_raw_source.rb +20 -0
- data/lib/sourcify/lib/sourcify/proc/methods/to_sexp.rb +40 -0
- data/lib/sourcify/lib/sourcify/proc/methods/to_source.rb +48 -0
- data/lib/sourcify/lib/sourcify/proc/parser.rb +51 -0
- data/lib/sourcify/lib/sourcify/proc/parser/converter.rb +8 -0
- data/lib/sourcify/lib/sourcify/proc/parser/normalizer.rb +43 -0
- data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner.rb +2498 -0
- data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner.rl +149 -0
- data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner_extensions.rb +74 -0
- data/lib/sourcify/lib/sourcify/proc/parser/scanner.rb +49 -0
- data/lib/sourcify/lib/sourcify/proc/parser/source_code.rb +8 -0
- data/lib/sourcify/lib/sourcify/version.rb +3 -0
- data/lib/sourcify/sourcify.gemspec +31 -0
- data/lib/sourcify/spec/dump_object_space_procs.rb +84 -0
- data/lib/sourcify/spec/method/encoding_from_def_end_block_spec.rb +33 -0
- data/lib/sourcify/spec/method/encoding_from_define_method_spec.rb +37 -0
- data/lib/sourcify/spec/method/others_from_def_end_block_spec.rb +49 -0
- data/lib/sourcify/spec/method/others_from_define_method_spec.rb +63 -0
- data/lib/sourcify/spec/method/raw_scanner/block_comment_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/double_colons_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/heredoc_w_indent_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
- data/lib/sourcify/spec/method/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
- data/lib/sourcify/spec/method/raw_scanner/per_line_comment_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/single_quote_str_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/slash_operator_spec.rb +8 -0
- data/lib/sourcify/spec/method/raw_scanner/spec_helper.rb +80 -0
- data/lib/sourcify/spec/method/spec_helper.rb +1 -0
- data/lib/sourcify/spec/method/to_raw_source_spec.rb +31 -0
- data/lib/sourcify/spec/method/to_raw_source_w_specified_strip_enclosure_spec.rb +148 -0
- data/lib/sourcify/spec/method/to_sexp_from_def_end_block_w_variables_spec.rb +46 -0
- data/lib/sourcify/spec/method/to_sexp_from_def_end_block_within_irb_spec.rb +38 -0
- data/lib/sourcify/spec/method/to_sexp_from_def_end_block_within_pry_spec.rb +38 -0
- data/lib/sourcify/spec/method/to_sexp_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +56 -0
- data/lib/sourcify/spec/method/to_sexp_from_define_method_w_variables_spec.rb +52 -0
- data/lib/sourcify/spec/method/to_sexp_from_define_method_within_irb_spec.rb +42 -0
- data/lib/sourcify/spec/method/to_sexp_from_define_method_within_pry_spec.rb +42 -0
- data/lib/sourcify/spec/method/to_sexp_w_specified_strip_enclosure_spec.rb +74 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_19_extras_spec.rb +23 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_begin_spec.rb +35 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_case_spec.rb +35 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_class_spec.rb +51 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_do_end_block_spec.rb +33 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_for_spec.rb +126 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_if_spec.rb +83 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_literal_keyword_spec.rb +141 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_method_spec.rb +33 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_module_spec.rb +59 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_unless_spec.rb +83 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_until_spec.rb +179 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_while_spec.rb +179 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_w_singleton_method_spec.rb +19 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_within_irb_spec.rb +30 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_block_within_pry_spec.rb +45 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_w_multi_blocks_and_many_matches_spec.rb +30 -0
- data/lib/sourcify/spec/method/to_source_from_def_end_w_multi_blocks_and_single_match_spec.rb +36 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_braced_block_spec.rb +113 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_do_end_block_spec.rb +145 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_many_matches_spec.rb +56 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_single_match_spec.rb +73 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_many_matches_spec.rb +36 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_no_match_spec.rb +36 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_single_match_spec.rb +28 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +103 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_many_matches_spec.rb +36 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_no_match_spec.rb +36 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_single_match_spec.rb +28 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_ignore_nested_spec.rb +36 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_within_irb_spec.rb +32 -0
- data/lib/sourcify/spec/method/to_source_from_define_method_within_pry_spec.rb +49 -0
- data/lib/sourcify/spec/method/to_source_magic_file_var_spec.rb +176 -0
- data/lib/sourcify/spec/method/to_source_magic_line_var_spec.rb +298 -0
- data/lib/sourcify/spec/method/to_source_w_specified_strip_enclosure_spec.rb +39 -0
- data/lib/sourcify/spec/no_method/unsupported_platform_spec.rb +26 -0
- data/lib/sourcify/spec/proc/19x_extras.rb +27 -0
- data/lib/sourcify/spec/proc/created_on_the_fly_proc_spec.rb +80 -0
- data/lib/sourcify/spec/proc/encoding_spec.rb +36 -0
- data/lib/sourcify/spec/proc/others_spec.rb +40 -0
- data/lib/sourcify/spec/proc/raw_scanner/block_comment_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/double_colons_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/heredoc_w_indent_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
- data/lib/sourcify/spec/proc/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
- data/lib/sourcify/spec/proc/raw_scanner/per_line_comment_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/single_quote_str_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/slash_operator_spec.rb +8 -0
- data/lib/sourcify/spec/proc/raw_scanner/spec_helper.rb +63 -0
- data/lib/sourcify/spec/proc/readme +5 -0
- data/lib/sourcify/spec/proc/spec_helper.rb +1 -0
- data/lib/sourcify/spec/proc/to_raw_source_spec.rb +33 -0
- data/lib/sourcify/spec/proc/to_raw_source_w_specified_strip_enclosure_spec.rb +69 -0
- data/lib/sourcify/spec/proc/to_sexp_from_multi_blocks_w_specified_attached_to_spec.rb +46 -0
- data/lib/sourcify/spec/proc/to_sexp_variables_spec.rb +146 -0
- data/lib/sourcify/spec/proc/to_sexp_w_specified_strip_enclosure_spec.rb +60 -0
- data/lib/sourcify/spec/proc/to_sexp_within_irb_spec.rb +146 -0
- data/lib/sourcify/spec/proc/to_sexp_within_pry_spec.rb +149 -0
- data/lib/sourcify/spec/proc/to_source_from_braced_block_w_nested_braced_block_spec.rb +33 -0
- data/lib/sourcify/spec/proc/to_source_from_braced_block_w_nested_hash_spec.rb +82 -0
- data/lib/sourcify/spec/proc/to_source_from_braced_block_wo_nesting_complication_spec.rb +46 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_begin_spec.rb +35 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_case_spec.rb +35 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_class_spec.rb +89 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_do_end_block_spec.rb +33 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_for_spec.rb +132 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_if_spec.rb +87 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_literal_keyword_spec.rb +103 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_method_spec.rb +33 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_module_spec.rb +49 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_unless_spec.rb +87 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_until_spec.rb +189 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_while_spec.rb +189 -0
- data/lib/sourcify/spec/proc/to_source_from_do_end_block_wo_nesting_complication_spec.rb +46 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_many_matches_spec.rb +43 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_single_match_spec.rb +20 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_many_matches_spec.rb +45 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_no_match_spec.rb +45 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_single_match_spec.rb +22 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_spec.rb +84 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_many_matches_spec.rb +45 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_no_match_spec.rb +45 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_single_match_spec.rb +22 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_ignore_nested_spec.rb +43 -0
- data/lib/sourcify/spec/proc/to_source_from_multi_do_end_blocks_w_single_match_spec.rb +31 -0
- data/lib/sourcify/spec/proc/to_source_magic_file_var_spec.rb +127 -0
- data/lib/sourcify/spec/proc/to_source_magic_line_var_spec.rb +127 -0
- data/lib/sourcify/spec/proc/to_source_variables_spec.rb +29 -0
- data/lib/sourcify/spec/proc/to_source_w_specified_strip_enclosure_spec.rb +33 -0
- data/lib/sourcify/spec/proc/to_source_within_irb_spec.rb +38 -0
- data/lib/sourcify/spec/proc/to_source_within_pry_spec.rb +61 -0
- data/lib/sourcify/spec/raw_scanner/block_comment_shared_spec.rb +57 -0
- data/lib/sourcify/spec/raw_scanner/double_colons_shared_spec.rb +11 -0
- data/lib/sourcify/spec/raw_scanner/double_quote_str_w_interpolation_shared_spec.rb +60 -0
- data/lib/sourcify/spec/raw_scanner/double_quote_str_wo_interpolation_shared_spec.rb +86 -0
- data/lib/sourcify/spec/raw_scanner/heredoc_w_indent_shared_spec.rb +69 -0
- data/lib/sourcify/spec/raw_scanner/heredoc_wo_indent_shared_spec.rb +70 -0
- data/lib/sourcify/spec/raw_scanner/kw_block_start_alias1_shared_spec.rb +73 -0
- data/lib/sourcify/spec/raw_scanner/kw_block_start_alias2_shared_spec.rb +73 -0
- data/lib/sourcify/spec/raw_scanner/per_line_comment_shared_spec.rb +32 -0
- data/lib/sourcify/spec/raw_scanner/shared_specs.rb +3 -0
- data/lib/sourcify/spec/raw_scanner/single_quote_str_shared_spec.rb +79 -0
- data/lib/sourcify/spec/raw_scanner/slash_operator_shared_spec.rb +71 -0
- data/lib/sourcify/spec/run_build.sh +25 -0
- data/lib/sourcify/spec/spec_helper.rb +130 -0
- data/lib/symbolic/symbolic.rb +248 -0
- data/lib/symbolic/visitor.rb +51 -0
- data/lib/translator/block_translator.rb +123 -0
- data/lib/translator/command_translator.rb +421 -0
- data/lib/translator/last_returns_visitor.rb +57 -0
- data/lib/translator/local_variables_enumerator.rb +35 -0
- data/lib/translator/method_translator.rb +24 -0
- data/lib/translator/translator.rb +49 -0
- data/lib/type_aware_array.rb +71 -0
- data/lib/types/array_type.rb +51 -0
- data/lib/types/class_type.rb +128 -0
- data/lib/types/object_tracer.rb +162 -0
- data/lib/types/primitive_type.rb +73 -0
- data/lib/types/ruby_extension.rb +67 -0
- data/lib/types/ruby_type.rb +45 -0
- data/lib/types/type_inference.rb +382 -0
- data/lib/types/union_type.rb +155 -0
- 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,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
|