class AdLint::Cc1::Variable
DESCRIPTION¶ ↑
Variable
class hierarchy¶ ↑
Variable <-- ScopedVariable <-- OuterVariable <-- NamedVariable --------> Nameable <<module>> <-- AliasVariable ^ <-- TemporaryVariable | <-- InnerVariable -------------+ <-- ArrayElementVariable <-- CompositeMemberVariable
Public Class Methods
new(mem, dcl_or_def, type)
click to toggle source
Calls superclass method
AdLint::Cc1::TypedObject::new
# File lib/adlint/cc1/object.rb, line 212 def initialize(mem, dcl_or_def, type) super(type, dcl_or_def) relate_to_memory(mem) end
Public Instance Methods
assign!(val, src = nil, br = nil)
click to toggle source
# File lib/adlint/cc1/object.rb, line 245 def assign!(val, src = nil, br = nil) # NOTE: Length of the incomplete array type should be deducted while # initializer evaluation. So, adjustment of the assigning value # can be done at this point by Value#coerce_to(type). # NOTE: Domain of the assigning value must be narrowed before writing to # the memory by Value#coerce_to(type). binding.memory.write(val.coerce_to(type), src, br) end
begin_value_versioning()
click to toggle source
# File lib/adlint/cc1/object.rb, line 288 def begin_value_versioning value.begin_versioning end
end_value_versioning()
click to toggle source
# File lib/adlint/cc1/object.rb, line 292 def end_value_versioning value.end_versioning end
enter_value_versioning_group()
click to toggle source
# File lib/adlint/cc1/object.rb, line 280 def enter_value_versioning_group value.enter_versioning_group end
function?()
click to toggle source
# File lib/adlint/cc1/object.rb, line 217 def function? false end
inner?()
click to toggle source
# File lib/adlint/cc1/object.rb, line 233 def inner? subclass_responsibility end
leave_value_versioning_group(raise_complement)
click to toggle source
# File lib/adlint/cc1/object.rb, line 284 def leave_value_versioning_group(raise_complement) value.leave_versioning_group(raise_complement) end
name()
click to toggle source
# File lib/adlint/cc1/object.rb, line 225 def name subclass_responsibility end
named?()
click to toggle source
# File lib/adlint/cc1/object.rb, line 229 def named? false end
narrow_value_domain!(op, val)
click to toggle source
# File lib/adlint/cc1/object.rb, line 258 def narrow_value_domain!(op, val) assign!(type.arbitrary_value) unless self.value self.value.narrow_domain!(op, val.coerce_to(type)) # NOTE: Write via memory to correctly propagate inner variable's # mutation to its outer variable. binding.memory._cascade_update(nil, nil) self.value.exist? end
outer?()
click to toggle source
# File lib/adlint/cc1/object.rb, line 237 def outer? !inner? end
rollback_all_value_versions!()
click to toggle source
# File lib/adlint/cc1/object.rb, line 300 def rollback_all_value_versions! value.rollback_all_versions! end
thin_latest_value_version!(with_rollback)
click to toggle source
# File lib/adlint/cc1/object.rb, line 296 def thin_latest_value_version!(with_rollback) value.thin_latest_version!(with_rollback) end
uninitialize!()
click to toggle source
# File lib/adlint/cc1/object.rb, line 254 def uninitialize! assign!(self.type.undefined_value) end
value()
click to toggle source
# File lib/adlint/cc1/object.rb, line 241 def value binding.memory.read end
variable?()
click to toggle source
# File lib/adlint/cc1/object.rb, line 221 def variable? true end
widen_value_domain!(op, val)
click to toggle source
# File lib/adlint/cc1/object.rb, line 269 def widen_value_domain!(op, val) assign!(type.nil_value) unless self.value self.value.widen_domain!(op, val.coerce_to(type)) # NOTE: Write via memory to correctly propagate inner variable's # mutation to its outer variable. binding.memory._cascade_update(nil, nil) self.value.exist? end
Private Instance Methods
relate_to_memory(mem)
click to toggle source
# File lib/adlint/cc1/object.rb, line 305 def relate_to_memory(mem) bind_to(mem) end