Class: LLVM::Module
- Inherits:
-
Object
- Object
- LLVM::Module
- Includes:
- PointerIdentity
- Defined in:
- lib/llvm/linker.rb,
lib/llvm/analysis.rb,
lib/llvm/core/module.rb,
lib/llvm/core/bitcode.rb
Defined Under Namespace
Classes: FunctionCollection, GlobalCollection, TypeCollection
Class Method Summary collapse
- .from_ptr(ptr) ⇒ Object
-
.parse_bitcode(path_or_memory_buffer) ⇒ LLVM::Module
Parse a module from a memory buffer.
Instance Method Summary collapse
-
#data_layout ⇒ String
Get module data layout.
-
#data_layout=(data_layout) ⇒ Object
Set module data layout.
- #dispose ⇒ Object
-
#dump ⇒ Object
Print the module’s IR to the standard error.
-
#functions ⇒ Object
Returns a FunctionCollection of all the Functions in the module.
-
#globals ⇒ Object
Returns an Enumerable of all the GlobalVariables in the module.
-
#initialize(name) ⇒ Module
constructor
Important: Call #dispose to free backend memory after use, but not when using JITCompiler with this module.
-
#link_into(other) ⇒ nil, String
Link the current module into
other
. -
#to_s ⇒ Object
Returns the LLVM IR of the module as a string.
-
#triple ⇒ String
Get module triple.
-
#triple=(triple) ⇒ Object
Set module triple.
-
#types ⇒ Object
Returns a TypeCollection of all the Types in the module.
-
#verify ⇒ nil, String
Verify that the module is valid.
-
#verify! ⇒ nil
Verify that a module is valid, and abort the process if not.
-
#write_bitcode(path_or_io) ⇒ true, false
Write bitcode to the given path, IO object or file descriptor.
Methods included from PointerIdentity
Constructor Details
#initialize(name) ⇒ Module
Important: Call #dispose to free backend memory after use, but not when using JITCompiler with this module.
16 17 18 |
# File 'lib/llvm/core/module.rb', line 16 def initialize(name) @ptr = C.module_create_with_name(name) end |
Class Method Details
.from_ptr(ptr) ⇒ Object
8 9 10 11 12 13 |
# File 'lib/llvm/core/module.rb', line 8 def self.from_ptr(ptr) return if ptr.null? mod = allocate mod.instance_variable_set(:@ptr, ptr) mod end |
.parse_bitcode(path_or_memory_buffer) ⇒ LLVM::Module
Parse a module from a memory buffer
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/llvm/core/bitcode.rb', line 10 def self.parse_bitcode(path_or_memory_buffer) memory_buffer = case path_or_memory_buffer when MemoryBuffer then path_or_memory_buffer else MemoryBuffer.from_file(path_or_memory_buffer) end FFI::MemoryPointer.new(:pointer) do |mod_ref| FFI::MemoryPointer.new(:pointer) do |msg_ref| status = C.parse_bitcode(memory_buffer, mod_ref, msg_ref) raise msg_ref.get_pointer(0).get_string(0) if status != 0 return from_ptr(mod_ref.get_pointer(0)) end end end |
Instance Method Details
#data_layout ⇒ String
Get module data layout.
44 45 46 |
# File 'lib/llvm/core/module.rb', line 44 def data_layout C.get_data_layout(self) end |
#data_layout=(data_layout) ⇒ Object
Set module data layout.
51 52 53 |
# File 'lib/llvm/core/module.rb', line 51 def data_layout=(data_layout) C.set_data_layout(self, data_layout.to_s) end |
#dispose ⇒ Object
20 21 22 23 24 25 |
# File 'lib/llvm/core/module.rb', line 20 def dispose return if @ptr.nil? C.dispose_module(@ptr) @ptr = nil end |
#dump ⇒ Object
Print the module’s IR to the standard error.
237 238 239 |
# File 'lib/llvm/core/module.rb', line 237 def dump C.dump_module(self) end |
#functions ⇒ Object
Returns a FunctionCollection of all the Functions in the module.
148 149 150 |
# File 'lib/llvm/core/module.rb', line 148 def functions @functions ||= FunctionCollection.new(self) end |
#globals ⇒ Object
Returns an Enumerable of all the GlobalVariables in the module.
74 75 76 |
# File 'lib/llvm/core/module.rb', line 74 def globals @globals ||= GlobalCollection.new(self) end |
#link_into(other) ⇒ nil, String
Link the current module into other
.
12 13 14 15 16 |
# File 'lib/llvm/linker.rb', line 12 def link_into(other) LLVM. do |msg| C.link_modules2(other, self) end end |
#to_s ⇒ Object
Returns the LLVM IR of the module as a string.
232 233 234 |
# File 'lib/llvm/core/module.rb', line 232 def to_s C.print_module_to_string(self) end |
#triple ⇒ String
Get module triple.
30 31 32 |
# File 'lib/llvm/core/module.rb', line 30 def triple C.get_target(self) end |
#triple=(triple) ⇒ Object
Set module triple.
37 38 39 |
# File 'lib/llvm/core/module.rb', line 37 def triple=(triple) C.set_target(self, triple.to_s) end |
#types ⇒ Object
Returns a TypeCollection of all the Types in the module.
56 57 58 |
# File 'lib/llvm/core/module.rb', line 56 def types @types ||= TypeCollection.new(self) end |
#verify ⇒ nil, String
Verify that the module is valid.
13 14 15 |
# File 'lib/llvm/analysis.rb', line 13 def verify do_verification(:return_status) end |
#verify! ⇒ nil
Verify that a module is valid, and abort the process if not.
19 20 21 |
# File 'lib/llvm/analysis.rb', line 19 def verify! do_verification(:abort_process) end |
#write_bitcode(path_or_io) ⇒ true, false
Write bitcode to the given path, IO object or file descriptor
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/llvm/core/bitcode.rb', line 27 def write_bitcode(path_or_io) status = if path_or_io.respond_to?(:path) C.write_bitcode_to_file(self, path_or_io.path) elsif path_or_io.respond_to?(:fileno) C.write_bitcode_to_fd(self, path_or_io.fileno, 0, 1) elsif path_or_io.kind_of?(Integer) C.write_bitcode_to_fd(self, path_or_io, 0, 1) else C.write_bitcode_to_file(self, path_or_io.to_str) end status == 0 end |