class AdLint::Cc1::OuterVariable
Attributes
representative_element[R]
Public Class Methods
new(mem, dcl_or_def, type, scope)
click to toggle source
Calls superclass method
AdLint::Cc1::ScopedVariable::new
# File lib/adlint/cc1/object.rb, line 337 def initialize(mem, dcl_or_def, type, scope) super(mem, dcl_or_def, type, scope) # TODO: If too slow, make an index of inner variables. @inner_variables = create_inner_variables(type.unqualify, scope) @representative_element = create_representative_element(type.unqualify) end
Public Instance Methods
assign!(val, src = nil, br = nil)
click to toggle source
Calls superclass method
AdLint::Cc1::Variable#assign!
# File lib/adlint/cc1/object.rb, line 346 def assign!(val, src = nil, br = nil) super if @representative_element if val.undefined? repr_val = @representative_element.type.undefined_value else repr_val = @representative_element.type.arbitrary_value end @representative_element.assign!(repr_val, src, br) end end
begin_value_versioning()
click to toggle source
Calls superclass method
AdLint::Cc1::Variable#begin_value_versioning
# File lib/adlint/cc1/object.rb, line 382 def begin_value_versioning if @inner_variables @inner_variables.each do |inner| inner.begin_value_versioning end end super if @representative_element @representative_element.begin_value_versioning end end
end_value_versioning()
click to toggle source
Calls superclass method
AdLint::Cc1::Variable#end_value_versioning
# File lib/adlint/cc1/object.rb, line 394 def end_value_versioning if @inner_variables @inner_variables.each do |inner| inner.end_value_versioning end end super if @representative_element @representative_element.end_value_versioning end end
enter_value_versioning_group()
click to toggle source
Calls superclass method
AdLint::Cc1::Variable#enter_value_versioning_group
# File lib/adlint/cc1/object.rb, line 358 def enter_value_versioning_group if @inner_variables @inner_variables.each do |inner| inner.enter_value_versioning_group end end super if @representative_element @representative_element.enter_value_versioning_group end end
inner?()
click to toggle source
# File lib/adlint/cc1/object.rb, line 430 def inner? false end
inner_variable_at(idx)
click to toggle source
# File lib/adlint/cc1/object.rb, line 434 def inner_variable_at(idx) if @type.array? # TODO: If linear searching is too slow, use an index of inner # variables. target_name = ArrayElementVariable.component_name_of(idx) @inner_variables.find { |inner| inner.component_name == target_name } else nil end end
inner_variable_named(name)
click to toggle source
# File lib/adlint/cc1/object.rb, line 445 def inner_variable_named(name) if @type.composite? # TODO: If linear searching is too slow, use an index of inner # variables. target_name = CompositeMemberVariable.component_name_of(name) @inner_variables.each do |inner| case when inner.component_name.nil? if var = inner.inner_variable_named(name) return var end when inner.component_name == target_name return inner end end end nil end
leave_value_versioning_group(raise_complement)
click to toggle source
Calls superclass method
AdLint::Cc1::Variable#leave_value_versioning_group
# File lib/adlint/cc1/object.rb, line 370 def leave_value_versioning_group(raise_complement) if @inner_variables @inner_variables.each do |inner| inner.leave_value_versioning_group(raise_complement) end end super if @representative_element @representative_element.leave_value_versioning_group(raise_complement) end end
rollback_all_value_versions!()
click to toggle source
Calls superclass method
AdLint::Cc1::Variable#rollback_all_value_versions!
# File lib/adlint/cc1/object.rb, line 418 def rollback_all_value_versions! if @inner_variables @inner_variables.each do |inner| inner.rollback_all_value_versions! end end super if @representative_element @representative_element.rollback_all_value_versions! end end
thin_latest_value_version!(with_rollback)
click to toggle source
Calls superclass method
AdLint::Cc1::Variable#thin_latest_value_version!
# File lib/adlint/cc1/object.rb, line 406 def thin_latest_value_version!(with_rollback) if @inner_variables @inner_variables.each do |inner| inner.thin_latest_value_version!(with_rollback) end end super if @representative_element @representative_element.thin_latest_value_version!(with_rollback) end end
Private Instance Methods
create_array_elements(type, scope, mem)
click to toggle source
# File lib/adlint/cc1/object.rb, line 476 def create_array_elements(type, scope, mem) offset = 0 type.impl_length.times.map do |idx| win = mem.create_window(offset, type.base_type.aligned_byte_size) offset += win.byte_size ArrayElementVariable.new(win, self, type.base_type, idx) end end
create_composite_members(type, scope, mem)
click to toggle source
# File lib/adlint/cc1/object.rb, line 485 def create_composite_members(type, scope, mem) offset = 0 type.members.map do |memb| win = mem.create_window(offset, memb.type.aligned_byte_size) offset += win.byte_size CompositeMemberVariable.new(win, self, memb.type, memb.name) end end
create_inner_variables(type, scope)
click to toggle source
# File lib/adlint/cc1/object.rb, line 465 def create_inner_variables(type, scope) case when type.array? create_array_elements(type, scope, binding.memory) when type.composite? create_composite_members(type, scope, binding.memory) else nil end end
create_representative_element(type)
click to toggle source
# File lib/adlint/cc1/object.rb, line 494 def create_representative_element(type) if type.array? mem = binding.memory.create_unmapped_window ArrayElementVariable.new(mem, self, type.base_type, 0).tap do |var| var.assign!(type.base_type.undefined_value) end else nil end end