Class: Ruby2CExtension::Plugins::RequireInclude
- Inherits:
-
Ruby2CExtension::Plugin
- Object
- Ruby2CExtension::Plugin
- Ruby2CExtension::Plugins::RequireInclude
- Defined in:
- lib/ruby2cext/plugins/require_include.rb
Instance Attribute Summary collapse
-
#include_paths ⇒ Object
readonly
Returns the value of attribute include_paths.
Attributes inherited from Ruby2CExtension::Plugin
Instance Method Summary collapse
-
#initialize(compiler, include_paths, ignore_files = nil) ⇒ RequireInclude
constructor
A new instance of RequireInclude.
- #search_file(req_str) ⇒ Object
Methods inherited from Ruby2CExtension::Plugin
Constructor Details
#initialize(compiler, include_paths, ignore_files = nil) ⇒ RequireInclude
Returns a new instance of RequireInclude.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/ruby2cext/plugins/require_include.rb', line 10 def initialize(compiler, include_paths, ignore_files = nil) super(compiler) @include_paths = include_paths done = {} if ignore_files ignore_files.each { |file| done[File.(file)] = true } end compiler.add_preprocessor(:fcall) { |cfun, node| hash = node.last if hash[:mid] == :require && (args = hash[:args]) && args.first == :array && (args = args.last).size == 1 && Array === args[0] && args[0].first == :str && (file = search_file(args[0].last[:lit])) unless done[File.(file)] done[File.(file)] = true cfun.compiler.log "including require'd file: #{file}" cfun.instance_eval { add_helper <<-EOC static NODE * find_top_cref(NODE *cref) { while (cref && cref->nd_next) cref = cref->nd_next; return cref; } EOC c_scope { l "NODE *top_cref = find_top_cref(#{get_cref});" l "static int done = 0;" c_if("!done") { l "done = 1;" compiler.rb_file_to_toplevel_functions(IO.read(file), file).each { |tlfn| l "#{tlfn}(org_ruby_top_self, top_cref);" } } } } end "Qtrue" else node end } end |
Instance Attribute Details
#include_paths ⇒ Object (readonly)
Returns the value of attribute include_paths.
8 9 10 |
# File 'lib/ruby2cext/plugins/require_include.rb', line 8 def include_paths @include_paths end |
Instance Method Details
#search_file(req_str) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/ruby2cext/plugins/require_include.rb', line 57 def search_file(req_str) req_str = req_str.dup unless req_str =~ /\.rb\z/ req_str << ".rb" end res = false include_paths.map { |path| File.join(path, req_str) }.find { |file| File.exists? file } end |