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 IR, 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
57
58
# 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

    if status.zero?
      buf_ptr.get_pointer(0)
    else
      raise msg_ptr.get_pointer(0).get_string(0)
    end
  end

  # Define a finalizer to free the memory used by LLVM for this

  # memory buffer.

  ObjectSpace.define_finalizer(self, CLASS_FINALIZER)
end

Instance Method Details

#sizeInteger

Get the size of the memory buffer.

Returns:

  • (Integer)

    Size of memory buffer



63
64
65
# File 'lib/rltk/cg/memory_buffer.rb', line 63

def size
  Bindings.get_buffer_size(@ptr)
end

#startString

Get a copy of the memory buffer, from the beginning, as a sequence of characters.

Returns:

  • (String)


71
72
73
# File 'lib/rltk/cg/memory_buffer.rb', line 71

def start
  Bindings.get_buffer_start(@ptr)
end