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
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