Class: Prism::LibRubyParser::PrismBuffer

Inherits:
Object
  • Object
show all
Defined in:
lib/prism/ffi.rb

Overview

This object represents a pm_buffer_t. We only use it as an opaque pointer, so it doesn’t need to know the fields of pm_buffer_t.

Constant Summary collapse

SIZEOF =

:nodoc:

LibRubyParser.pm_buffer_sizeof

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pointer) ⇒ PrismBuffer

Returns a new instance of PrismBuffer.



128
129
130
# File 'lib/prism/ffi.rb', line 128

def initialize(pointer)
  @pointer = pointer
end

Instance Attribute Details

#pointerObject (readonly)

Returns the value of attribute pointer.



126
127
128
# File 'lib/prism/ffi.rb', line 126

def pointer
  @pointer
end

Class Method Details

.withObject

Initialize a new buffer and yield it to the block. The buffer will be automatically freed when the block returns.



146
147
148
149
150
151
152
153
# File 'lib/prism/ffi.rb', line 146

def self.with
  FFI::MemoryPointer.new(SIZEOF) do |pointer|
    raise unless LibRubyParser.pm_buffer_init(pointer)
    return yield new(pointer)
  ensure
    LibRubyParser.pm_buffer_free(pointer)
  end
end

Instance Method Details

#lengthObject



136
137
138
# File 'lib/prism/ffi.rb', line 136

def length
  LibRubyParser.pm_buffer_length(pointer)
end

#readObject



140
141
142
# File 'lib/prism/ffi.rb', line 140

def read
  value.read_string(length)
end

#valueObject



132
133
134
# File 'lib/prism/ffi.rb', line 132

def value
  LibRubyParser.pm_buffer_value(pointer)
end