class AdLint::Cc1::MemoryBlock

Attributes

windows[R]

Public Class Methods

new(addr, byte_size) click to toggle source
Calls superclass method AdLint::Cc1::Memory::new
# File lib/adlint/cc1/object.rb, line 1204
def initialize(addr, byte_size)
  super
  @windows = []
end

Public Instance Methods

_orig_write(val, src, br)
Alias for: write
create_unmapped_window() click to toggle source
# File lib/adlint/cc1/object.rb, line 1218
def create_unmapped_window
  UnmappedMemoryWindow.new(self).tap do |win|
    win.on_written += method(:handle_written_through_window)
  end
end
create_window(offset, byte_size) click to toggle source
# File lib/adlint/cc1/object.rb, line 1211
def create_window(offset, byte_size)
  MemoryWindow.new(self, @address + offset, byte_size).tap do |win|
    win.on_written += method(:handle_written_through_window)
    @windows.push(win)
  end
end
write(val, src, br) click to toggle source
Calls superclass method AdLint::Cc1::Memory#write
# File lib/adlint/cc1/object.rb, line 1225
def write(val, src, br)
  super
  if !@windows.empty? and
      @value.array? && val.array? or @value.composite? && val.composite?
    @windows.zip(val.to_single_value.values).each do |win, inner_val|
      win.write(inner_val, src, br, false)
    end
  end
end
Also aliased as: _orig_write

Protected Instance Methods

create_value_from_windows() click to toggle source
# File lib/adlint/cc1/object.rb, line 1236
def create_value_from_windows
  if @value
    case
    when @value.scalar?
      @value
    when @value.array?
      ArrayValue.new(@windows.map { |w| w.create_value_from_windows })
    when @value.composite?
      CompositeValue.new(@windows.map { |w| w.create_value_from_windows })
    else
      __NOTREACHED__
    end
  else
    nil
  end
end

Private Instance Methods

handle_written_through_window(win, src, br) click to toggle source
# File lib/adlint/cc1/object.rb, line 1254
def handle_written_through_window(win, src, br)
  if val = create_value_from_windows
    unless win.read.test_must_be_undefined.true?
      val = val.to_defined_value
    end
    _orig_write(val, src, br)
  end
end