Class: RLTK::CG::MemoryBuffer

Inherits:
Object
  • Object
show all
Includes:
BindingClass
Defined in:
lib/rltk/cg/memory_buffer.rb

Overview

This class is used by the Module class to dump and load LLVM bitcode.

Constant Summary collapse

CLASS_FINALIZER =

The Proc object called by the garbage collector to free resources used by LLVM.

Proc.new { |id| Bindings.dispose_memory_buffer(ptr) if ptr = ObjectSpace._id2ref(id).ptr }

Instance Attribute Summary

Attributes included from BindingClass

#ptr

Instance Method Summary collapse

Methods included from BindingClass

#==

Constructor Details

#initialize(overloaded = nil) ⇒ MemoryBuffer

Create a new memory buffer.

Parameters:

  • overloaded (FFI::Pointer, String, nil) (defaults to: nil)

    This parameter may be either a pointer to an existing memory buffer, the name of a file containing LLVM bitcode, or nil. If it is nil the memory buffer will read from standard in.



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
56
# File 'lib/rltk/cg/memory_buffer.rb', line 31

def initialize(overloaded = nil)
	@ptr =
	case overloaded
	when FFI::Pointer
		overloaded
	else
		buf_ptr = FFI::MemoryPointer.new(:pointer)
		msg_ptr = FFI::MemoryPointer.new(:pointer)
		
		status =
		case overloaded
		when String
			Bindings.create_memory_buffer_with_contents_of_file(overloaded, buf_ptr, msg_ptr)
		else
			Bindings.create_memory_buffer_with_stdin(buf_ptr, msg_ptr)
		end
		
		raise msg_ptr.get_pointer(0).get_string(0) if status != 0
		
		buf_ptr.get_pointer(0)
	end
	
	# Define a finalizer to free the memory used by LLVM for this
	# memory buffer.
	ObjectSpace.define_finalizer(self, CLASS_FINALIZER)
end