class NetLinx::SourceFile
A NetLinx
source code file. Typically .axs or .axi.
Public Class Methods
new(**kwargs)
click to toggle source
NOTE: SourceFile
searches the body of the source file to automatically determine include and module paths.
@option kwargs [String] :file Name or path of the file to compile. @option kwargs [Array<String>] :compiler_include_paths Additional paths for the compiler to find include files. @option kwargs [Array<String>] :compiler_module_paths Additional paths for the compiler to find module files.
# File lib/netlinx/source_file.rb, line 12 def initialize(**kwargs) @compiler_target_files = [ kwargs.fetch(:file, nil) ] @compiler_include_paths = kwargs.fetch :compiler_include_paths, [] @compiler_module_paths = kwargs.fetch :compiler_module_paths, [] return unless @compiler_target_files.first source_code = File.open(@compiler_target_files.first).read unless source_code.valid_encoding? source_code.force_encoding Encoding::ASCII_8BIT end # Scan file for additional include paths. includes = source_code.scan(/(?i)^\s*(?:\#include)\s+'([\w\-]+)'/) includes.each do |inc| inc = inc.first path = Dir["./**/#{inc}.*"].first next unless path path = File.expand_path path @compiler_include_paths << File.dirname(path) end @compiler_include_paths.uniq! # Scan file for additional module paths. modules = source_code.scan(/(?i)^\s*(?:define_module)\s+'([\w\-]+)'/) modules.each do |mod| mod = mod.first path = Dir["./**/#{mod}.*"].first next unless path path = File.expand_path path @compiler_module_paths << File.dirname(path) end @compiler_module_paths.uniq! end
Public Instance Methods
compile()
click to toggle source
Execute the compiler on itself.
# File lib/netlinx/source_file.rb, line 77 def compile require 'netlinx/compiler' compiler = NetLinx::Compiler.new result = compiler.compile self end
compiler_include_paths()
click to toggle source
@see _ lib/test/netlinx/compilable.rb interface.
# File lib/netlinx/source_file.rb, line 62 def compiler_include_paths @compiler_include_paths end
compiler_library_paths()
click to toggle source
@see _ lib/test/netlinx/compilable.rb interface.
# File lib/netlinx/source_file.rb, line 72 def compiler_library_paths [] end
compiler_module_paths()
click to toggle source
@see _ lib/test/netlinx/compilable.rb interface.
# File lib/netlinx/source_file.rb, line 67 def compiler_module_paths @compiler_module_paths end
compiler_target_files()
click to toggle source
@see _ lib/test/netlinx/compilable.rb interface.
# File lib/netlinx/source_file.rb, line 57 def compiler_target_files @compiler_target_files end