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,56 @@
|
|
|
1
|
+
require "rbconfig"
|
|
2
|
+
|
|
3
|
+
module Ikra
|
|
4
|
+
module Configuration
|
|
5
|
+
class << self
|
|
6
|
+
SUPPORTED_OS = [:linux, :macosx]
|
|
7
|
+
CUDA_NVCC = "/Developer/NVIDIA/CUDA-7.5/bin/nvcc"
|
|
8
|
+
|
|
9
|
+
def check_software_configuration
|
|
10
|
+
if !SUPPORTED_OS.include?(operating_system)
|
|
11
|
+
raise "Operating system not supported: #{operating_system}"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Check if nvcc is installed
|
|
15
|
+
%x(#{CUDA_NVCC})
|
|
16
|
+
if $?.exitstatus != 1
|
|
17
|
+
raise "nvcc not installed"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def nvcc_invocation_string(in_file, out_file)
|
|
22
|
+
"#{CUDA_NVCC} -o #{out_file} -I/usr/local/cuda/samples/common/inc --shared -Xcompiler -fPIC #{in_file}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def so_suffix
|
|
26
|
+
if operating_system == :linux
|
|
27
|
+
"so"
|
|
28
|
+
elsif operating_system == :macosx
|
|
29
|
+
"so"
|
|
30
|
+
elsif operating_system == :windows
|
|
31
|
+
"dll"
|
|
32
|
+
else
|
|
33
|
+
raise "Operating system not supported"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def operating_system
|
|
38
|
+
# copied from: http://stackoverflow.com/questions/11784109/detecting-operating-systems-in-ruby
|
|
39
|
+
|
|
40
|
+
host_os = RbConfig::CONFIG['host_os']
|
|
41
|
+
case host_os
|
|
42
|
+
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
|
|
43
|
+
:windows
|
|
44
|
+
when /darwin|mac os/
|
|
45
|
+
:macosx
|
|
46
|
+
when /linux/
|
|
47
|
+
:linux
|
|
48
|
+
when /solaris|bsd/
|
|
49
|
+
:unix
|
|
50
|
+
else
|
|
51
|
+
raise "Unknown operating system"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
data/lib/entity.rb
ADDED
data/lib/ikra.rb
ADDED
data/lib/parsing.rb
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require "parser/current"
|
|
2
|
+
require_relative "sourcify/lib/sourcify"
|
|
3
|
+
require "method_source"
|
|
4
|
+
|
|
5
|
+
module Parsing
|
|
6
|
+
class << self
|
|
7
|
+
def parse_block(block, local_variables = [])
|
|
8
|
+
parser = Parser::CurrentRuby.default_parser
|
|
9
|
+
local_variables.each do |var|
|
|
10
|
+
parser.static_env.declare(var)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
parser_source = Parser::Source::Buffer.new('(string)', 1)
|
|
14
|
+
parser_source.source = block.to_source(strip_enclosure: true)
|
|
15
|
+
|
|
16
|
+
return parser.parse(parser_source)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def parse_method(method)
|
|
20
|
+
parser = Parser::CurrentRuby.default_parser
|
|
21
|
+
method.parameters.each do |param|
|
|
22
|
+
parser.static_env.declare(param[1])
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
parser_source = Parser::Source::Buffer.new('(string)', 1)
|
|
26
|
+
# TODO: dirty hack necessary because Parser is broken
|
|
27
|
+
parser_source.source = method.source.lines[1..-2].join
|
|
28
|
+
|
|
29
|
+
return parser.parse(parser_source)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__device__ /*{return_type}*/ /*{name}*/(/*{parameters}*/)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#include <stdio.h>
|
|
2
|
+
|
|
3
|
+
#include <helper_cuda.h>
|
|
4
|
+
#include <helper_cuda_gl.h>
|
|
5
|
+
|
|
6
|
+
using namespace std;
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
/* ----- BEGIN Shared Library Export ----- */
|
|
10
|
+
// taken from http://stackoverflow.com/questions/2164827/explicitly-exporting-shared-library-functions-in-linux
|
|
11
|
+
|
|
12
|
+
#if defined(_MSC_VER)
|
|
13
|
+
// Microsoft
|
|
14
|
+
#define EXPORT __declspec(dllexport)
|
|
15
|
+
#define IMPORT __declspec(dllimport)
|
|
16
|
+
#elif defined(_GCC)
|
|
17
|
+
// GCC
|
|
18
|
+
#define EXPORT __attribute__((visibility("default")))
|
|
19
|
+
#define IMPORT
|
|
20
|
+
#else
|
|
21
|
+
// do nothing and hope for the best?
|
|
22
|
+
#define EXPORT
|
|
23
|
+
#define IMPORT
|
|
24
|
+
#pragma warning Unknown dynamic link import/export semantics.
|
|
25
|
+
#endif
|
|
26
|
+
/* ----- END Shared Library Export ----- */
|
|
27
|
+
|
|
28
|
+
/* ----- BEGIN Class Type ----- */
|
|
29
|
+
typedef int obj_id_t;
|
|
30
|
+
typedef int class_id_t;
|
|
31
|
+
/* ----- END Class Type ----- */
|
|
32
|
+
|
|
33
|
+
/* ----- BEGIN Union Type ----- */
|
|
34
|
+
typedef struct union_type_struct
|
|
35
|
+
{
|
|
36
|
+
class_id_t class_id;
|
|
37
|
+
obj_id_t object_id;
|
|
38
|
+
} union_t;
|
|
39
|
+
/* ----- END Union Type ----- */
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
/* ----- BEGIN Environment (lexical variables) ----- */
|
|
43
|
+
// environment_struct must be defined later
|
|
44
|
+
typedef struct environment_struct environment_t;
|
|
45
|
+
/* ----- END Environment (lexical variables) ----- */
|
|
46
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
extern "C" EXPORT /*{result_type}*/ *launch_kernel(environment_t */*{host_env}*/)
|
|
2
|
+
{
|
|
3
|
+
printf("kernel launched\n");
|
|
4
|
+
|
|
5
|
+
/* Modify host environment to contain device pointers addresses */
|
|
6
|
+
/*{copy_env}*/
|
|
7
|
+
|
|
8
|
+
/* Allocate device environment and copy over struct */
|
|
9
|
+
environment_t */*{dev_env}*/;
|
|
10
|
+
checkCudaErrors(cudaMalloc(&/*{dev_env}*/, sizeof(environment_t)));
|
|
11
|
+
checkCudaErrors(cudaMemcpy(/*{dev_env}*/, /*{host_env}*/, sizeof(environment_t), cudaMemcpyHostToDevice));
|
|
12
|
+
|
|
13
|
+
/*{result_type}*/ *host_result = (/*{result_type}*/ *) malloc(sizeof(/*{result_type}*/) * /*{result_size}*/);
|
|
14
|
+
/*{result_type}*/ *device_result;
|
|
15
|
+
checkCudaErrors(cudaMalloc(&device_result, sizeof(/*{result_type}*/) * /*{result_size}*/));
|
|
16
|
+
|
|
17
|
+
dim3 dim_grid(/*{grid_dim[0]}*/, /*{grid_dim[1]}*/, /*{grid_dim[2]}*/);
|
|
18
|
+
dim3 dim_block(/*{block_dim[0]}*/, /*{block_dim[1]}*/, /*{block_dim[2]}*/);
|
|
19
|
+
|
|
20
|
+
kernel<<<dim_grid, dim_block>>>(/*{dev_env}*/, device_result);
|
|
21
|
+
|
|
22
|
+
checkCudaErrors(cudaThreadSynchronize());
|
|
23
|
+
|
|
24
|
+
checkCudaErrors(cudaMemcpy(host_result, device_result, sizeof(/*{result_type}*/) * /*{result_size}*/, cudaMemcpyDeviceToHost));
|
|
25
|
+
checkCudaErrors(cudaFree(/*{dev_env}*/));
|
|
26
|
+
|
|
27
|
+
return host_result;
|
|
28
|
+
}
|
data/lib/scope.rb
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
require "set"
|
|
2
|
+
require_relative "types/union_type"
|
|
3
|
+
|
|
4
|
+
class Frame < Hash
|
|
5
|
+
def function_frame!
|
|
6
|
+
@is_function_frame = true
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def is_function_frame?
|
|
10
|
+
@is_function_frame ||= false
|
|
11
|
+
@is_function_frame
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def add_return_type(type)
|
|
15
|
+
if not is_function_frame?
|
|
16
|
+
raise "Return type allowed only for function frames"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
if not type.is_union_type?
|
|
20
|
+
raise "Expected union type"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
@return_type ||= Ikra::Types::UnionType.new
|
|
24
|
+
@return_type.expand(type)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def return_type
|
|
28
|
+
if not is_function_frame?
|
|
29
|
+
raise "Return type allowed only for function frames"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
@return_type ||= Ikra::Types::UnionType.new
|
|
33
|
+
@return_type
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def variable_names
|
|
37
|
+
keys
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
class Scope < Array
|
|
42
|
+
class Variable
|
|
43
|
+
attr_reader :type
|
|
44
|
+
attr_accessor :read
|
|
45
|
+
attr_accessor :written
|
|
46
|
+
|
|
47
|
+
def initialize(type = Ikra::Types::UnionType.new)
|
|
48
|
+
@type = type
|
|
49
|
+
@read = false
|
|
50
|
+
@written = false
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def top_frame
|
|
55
|
+
last
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def previous_frame
|
|
59
|
+
self[-2]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def push_frame
|
|
63
|
+
frame = Frame.new
|
|
64
|
+
frame.default_proc = Proc.new do |hash, key|
|
|
65
|
+
hash[key] = Variable.new
|
|
66
|
+
end
|
|
67
|
+
push(frame)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def push_function_frame
|
|
71
|
+
push_frame
|
|
72
|
+
top_frame.function_frame!
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def pop_frame
|
|
76
|
+
pop
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# TODO: maybe remove?
|
|
80
|
+
def define_shadowed(name, type)
|
|
81
|
+
if top_frame.has_key?(name)
|
|
82
|
+
raise "#{name} already defined"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
top_frame[name] = Variable.new(type)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def is_defined?(name)
|
|
89
|
+
any? do |frame|
|
|
90
|
+
frame.has_key?(name)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def get_type(name)
|
|
95
|
+
reverse_each do |frame|
|
|
96
|
+
if frame.has_key?(name)
|
|
97
|
+
return frame[name].type
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
raise "#{name} not found in symbol table"
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def declare_expand_type(name, type)
|
|
105
|
+
if not type.is_union_type?
|
|
106
|
+
raise "Expected union type"
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
top_frame[name].type.expand(type)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def add_return_type(type)
|
|
113
|
+
reverse_each.detect do |fr|
|
|
114
|
+
fr.add_return_type(type)
|
|
115
|
+
return self
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
raise "Function frame not found"
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def read!(name)
|
|
122
|
+
frame = reverse_each.detect do |fr|
|
|
123
|
+
fr.has_key?(name)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
frame[name].read = true
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def written!(name)
|
|
130
|
+
frame = reverse_each.detect do |fr|
|
|
131
|
+
fr.has_key?(name)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
frame[name].written = true
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def read_variables(frame_position)
|
|
138
|
+
frame = self[frame_position]
|
|
139
|
+
frame.select do |name, var|
|
|
140
|
+
var.read
|
|
141
|
+
end.keys
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def written_variables(frame_position)
|
|
145
|
+
frame = self[frame_position]
|
|
146
|
+
frame.select do |name, var|
|
|
147
|
+
var.written
|
|
148
|
+
end.keys
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def read_and_written_variables(frame_position = -1)
|
|
152
|
+
read_variables(frame_position) + written_variables(frame_position)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def new_frame(&block)
|
|
156
|
+
push_frame
|
|
157
|
+
yield
|
|
158
|
+
pop_frame
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def new_function_frame(&block)
|
|
162
|
+
push_function_frame
|
|
163
|
+
yield
|
|
164
|
+
pop_frame
|
|
165
|
+
end
|
|
166
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
=== Current (pre 0.6.0)
|
|
2
|
+
|
|
3
|
+
* adds Method#to_source, Method#to_sexp & Method#to_raw_source to MRI-1.9.2 (issue#3)
|
|
4
|
+
* extensive refactoring to existing proc support to support the above
|
|
5
|
+
* fixes incorrect encoding for scanner result (issue#19) [@tomykaira]
|
|
6
|
+
* ensures compatibility with pry (issue#22) [@ty, @scooter-dangle]
|
|
7
|
+
* fixes "already initialized const X" in ruby_parser" [@jmettraux]
|
|
8
|
+
|
|
9
|
+
=== 0.5.0 (May 2, 2011)
|
|
10
|
+
|
|
11
|
+
* adds Proc#to_raw_source that supports extracting of raw code, as it is written in
|
|
12
|
+
the source code (see issue#9), it supports all options that are already supported
|
|
13
|
+
by Proc#to_source.
|
|
14
|
+
* MRI-1.8.6 now supports both ParseTree & static-scanner mode
|
|
15
|
+
* out with infinity_test (due to unresolvable & unexpected consistent failure in
|
|
16
|
+
running specs for jruby-1.6.1 & always running ParseTree mode specs in static-scanner
|
|
17
|
+
mode), use homebaked rake tasks (spec:parsetree, spec:static & spec:all) to acheive
|
|
18
|
+
testing of different rubies in different modes
|
|
19
|
+
* removd dependency on jeweler, & use bundler instead to handle dependency & also have
|
|
20
|
+
our own handcrafted gemspec file
|
|
21
|
+
|
|
22
|
+
=== 0.4.2 (Feb 06, 2011)
|
|
23
|
+
|
|
24
|
+
* fixes Sourcify::NoMatchingProcError when inline proc contains hashes (issue#7) [#ngty]
|
|
25
|
+
* uses RubyParser#parse to eval correctness of code instead of Kernel#eval [#ngty]
|
|
26
|
+
|
|
27
|
+
=== 0.4.1 (Jan 29, 2011)
|
|
28
|
+
|
|
29
|
+
* fixes Sourcify::NoMatchingProcError when if/unless/until/while modifier follows
|
|
30
|
+
a trailing backslash (see issue#5) [#ngty]
|
|
31
|
+
|
|
32
|
+
=== 0.4.0 (Oct 15, 2010)
|
|
33
|
+
|
|
34
|
+
* adds Proc#to_source(:strip_enclosure => ...) (& the Proc#to_sexp equivalent) to ease
|
|
35
|
+
stripping of enclosing 'proc {|params| ... }', returning only the inner code body
|
|
36
|
+
'...' [#ngty]
|
|
37
|
+
* adds Proc#to_source(:attached_to => ..., :ignore_nested => ..., &body_matcher) (& the
|
|
38
|
+
Proc#to_sexp equivalent) to narrow down code scanning, avoiding unnecessary
|
|
39
|
+
Sourcify::MultipleMatchingProcsPerLineError, useful for libs that can anticipate
|
|
40
|
+
how the proc should look like [#ngty]
|
|
41
|
+
* adds support for running in MRI-1.9.2 [#ngty]
|
|
42
|
+
* fixes '/' operator always treated as start of regexp [#ngty & #seamusabshere]
|
|
43
|
+
|
|
44
|
+
=== 0.3.0 (Sep 23, 2010)
|
|
45
|
+
|
|
46
|
+
* Proc#to_source & friends now work in IRB as well [#ngty]
|
|
47
|
+
|
|
48
|
+
=== 0.2.3 (Sep 15, 2010)
|
|
49
|
+
|
|
50
|
+
* since (static) code scanner doesn't run in 1.8.6, we enforce ParseTree mode
|
|
51
|
+
for 1.8.6 [#ngty]
|
|
52
|
+
|
|
53
|
+
=== 0.2.2 (Sep 15, 2010)
|
|
54
|
+
|
|
55
|
+
* fixed failure to run on MRI-1.8.6 [#ngty]
|
|
56
|
+
|
|
57
|
+
=== 0.2.1 (Sep 14, 2010)
|
|
58
|
+
|
|
59
|
+
* introduced hack to ensure procs generated by Symbol#to_proc & Method#to_proc
|
|
60
|
+
behaves exactly the same way under 1.8.*, 1.9.* & JRuby ~> always throwing
|
|
61
|
+
CannotHandleCreatedOnTheFlyProcError [#ngty]
|
|
62
|
+
* minor cleaning up of ragel scanner [#ngty]
|
|
63
|
+
|
|
64
|
+
=== 0.2.0 (Sep 10, 2010)
|
|
65
|
+
|
|
66
|
+
* use home-baked ragel-based scanner for scanning for proc code [#ngty]
|
|
67
|
+
* renamed Sourcify::LexerInternalError to Sourcify::ParserInternalError since
|
|
68
|
+
we are not using any lexer anymore [#ngty]
|
|
69
|
+
* introduces CannotParseEvalCodeError, CannotParseIrbCodeError &
|
|
70
|
+
CannotHandleCreatedOnTheFlyProcError to handle procs that there is no way
|
|
71
|
+
to extract code from [#ngty]
|
|
72
|
+
* tested against well known projects (eg. spree & redmine) to show that it is
|
|
73
|
+
indeed working [#ngty]
|
|
74
|
+
|
|
75
|
+
=== 0.1.2 (Aug 30, 2010)
|
|
76
|
+
|
|
77
|
+
* introduced throwing of Sourcify::LexerInternalError when parser cannot handle
|
|
78
|
+
incorrectly lexed code fragments [#ngty]
|
|
79
|
+
* fixed bug in lexing keyword literals (represented as Symbol) [#ngty]
|
|
80
|
+
|
|
81
|
+
=== 0.1.1 (Aug 30, 2010)
|
|
82
|
+
|
|
83
|
+
* fixed empty return for Proc#to_sexp after calling of Proc#to_source [#ngty]
|
|
84
|
+
|
|
85
|
+
=== 0.1.0 (Aug 28, 2010)
|
|
86
|
+
|
|
87
|
+
* 1st gem release !! [#ngty]
|
|
88
|
+
|