Class: Inliner::Builder
- Inherits:
-
Object
- Object
- Inliner::Builder
- Defined in:
- lib/ffi-inliner/inliner.rb
Instance Attribute Summary collapse
-
#code ⇒ Object
readonly
Returns the value of attribute code.
-
#compiler ⇒ Object
readonly
Returns the value of attribute compiler.
Instance Method Summary collapse
- #build ⇒ Object
- #c(code) ⇒ Object
- #c_raw(code) ⇒ Object
- #include(fn, options = {}) ⇒ Object
-
#initialize(mod, code = "", options = {}) ⇒ Builder
constructor
A new instance of Builder.
- #library(*libraries) ⇒ Object
- #map(type_map) ⇒ Object
- #struct(ffi_struct) ⇒ Object
- #use_compiler(compiler) ⇒ Object
Constructor Details
#initialize(mod, code = "", options = {}) ⇒ Builder
Returns a new instance of Builder.
135 136 137 138 139 140 141 142 143 |
# File 'lib/ffi-inliner/inliner.rb', line 135 def initialize(mod, code = "", = {}) make_pointer_types @mod = mod @code = code @sig = [parse_signature(@code)] unless @code.empty? = { :use_compiler => Compilers::GCC }.merge() @compiler = [:use_compiler] @libraries = [] end |
Instance Attribute Details
#code ⇒ Object (readonly)
Returns the value of attribute code.
134 135 136 |
# File 'lib/ffi-inliner/inliner.rb', line 134 def code @code end |
#compiler ⇒ Object (readonly)
Returns the value of attribute compiler.
134 135 136 |
# File 'lib/ffi-inliner/inliner.rb', line 134 def compiler @compiler end |
Instance Method Details
#build ⇒ Object
178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/ffi-inliner/inliner.rb', line 178 def build @fm = FilenameManager.new(@mod, @code, @libraries) @compiler = @compiler.check_and_create(@fm, @libraries) unless @fm.cached? write_files(@code, @sig) @compiler.compile @mod.instance_eval generate_ffi(@sig) else @mod.instance_eval(File.read(@fm.rb_fn)) end end |
#c(code) ⇒ Object
157 158 159 160 |
# File 'lib/ffi-inliner/inliner.rb', line 157 def c(code) (@sig ||= []) << parse_signature(code) @code << (@compiler == Compilers::GPlusPlus ? "extern \"C\" {\n#{code}\n}" : code ) end |
#c_raw(code) ⇒ Object
162 163 164 |
# File 'lib/ffi-inliner/inliner.rb', line 162 def c_raw(code) @code << code end |
#include(fn, options = {}) ⇒ Object
149 150 151 |
# File 'lib/ffi-inliner/inliner.rb', line 149 def include(fn, = {}) [:quoted] ? @code << "#include \"#{fn}\"\n" : @code << "#include <#{fn}>\n" end |
#library(*libraries) ⇒ Object
153 154 155 |
# File 'lib/ffi-inliner/inliner.rb', line 153 def library(*libraries) (@libraries ||= []).concat(libraries) end |
#map(type_map) ⇒ Object
145 146 147 |
# File 'lib/ffi-inliner/inliner.rb', line 145 def map(type_map) @types.merge!(type_map) end |
#struct(ffi_struct) ⇒ Object
170 171 172 173 174 175 176 |
# File 'lib/ffi-inliner/inliner.rb', line 170 def struct(ffi_struct) @code << "typedef struct {" ffi_struct.layout.fields.each do |field| @code << "#{field} #{field.name};\n" end @code << "} #{ffi_struct.class.name}" end |
#use_compiler(compiler) ⇒ Object
166 167 168 |
# File 'lib/ffi-inliner/inliner.rb', line 166 def use_compiler(compiler) @compiler = compiler end |