class AdLint::Cc1::VersionedValue

Public Class Methods

new(orig_val, tag) click to toggle source
Calls superclass method AdLint::Cc1::MultipleValue::new
# File lib/adlint/cc1/value.rb, line 2530
def initialize(orig_val, tag)
  # NOTE: `orig_val.to_single_value' will be done in
  #       MultipleValue#initialize.
  super(orig_val, nil, tag)

  @version_controller = ValueVersionController.new(self)
end

Public Instance Methods

_orig_overwrite!(val, tag)
Alias for: overwrite!
begin_versioning() click to toggle source
# File lib/adlint/cc1/value.rb, line 2549
def begin_versioning
  @version_controller.begin_forking
end
coerce_to(type) click to toggle source
# File lib/adlint/cc1/value.rb, line 2608
def coerce_to(type)
  VersionedValue.new(to_single_value.coerce_to(type), _base.tag.dup)
end
effective_values() click to toggle source
# File lib/adlint/cc1/value.rb, line 2612
def effective_values
  @version_controller ? @version_controller.current_values : [self]
end
end_versioning() click to toggle source
# File lib/adlint/cc1/value.rb, line 2553
def end_versioning
  @version_controller.end_forking
  invalidate_memo!
end
enter_versioning_group() click to toggle source
# File lib/adlint/cc1/value.rb, line 2538
def enter_versioning_group
  @version_controller.enter_new_versioning_group
end
force_overwrite!(val) click to toggle source
# File lib/adlint/cc1/value.rb, line 2581
def force_overwrite!(val)
  # NOTE: This method will be invoked only from VariableTable#define.
  sval = val.to_single_value
  @version_controller.original_value.overwrite!(sval, nil)
  _orig_overwrite!(sval, nil)
  invalidate_memo!
end
invalidate_memo!() click to toggle source
# File lib/adlint/cc1/value.rb, line 2618
def invalidate_memo!
  forget_memo_of__to_single_value
end
invert_domain!() click to toggle source
# File lib/adlint/cc1/value.rb, line 2602
def invert_domain!
  @version_controller.fork_current_version
  super
  invalidate_memo!
end
leave_versioning_group(raise_complement) click to toggle source
# File lib/adlint/cc1/value.rb, line 2542
def leave_versioning_group(raise_complement)
  @version_controller.copy_current_version if raise_complement
  @version_controller.merge_forked_versions
  @version_controller.leave_current_versioning_group
  invalidate_memo!
end
narrow_domain!(op, ope_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 2589
def narrow_domain!(op, ope_val)
  @version_controller.fork_current_version
  super
  invalidate_memo!
end
overwrite!(val, tag) click to toggle source
Calls superclass method AdLint::Cc1::MultipleValue#overwrite!
# File lib/adlint/cc1/value.rb, line 2574
def overwrite!(val, tag)
  @version_controller.fork_current_version
  super
  @version_controller.mark_current_versioning_group_as_sticky
  invalidate_memo!
end
Also aliased as: _orig_overwrite!
rollback_all_versions!() click to toggle source
# File lib/adlint/cc1/value.rb, line 2563
def rollback_all_versions!
  delete_descendants!
  orig_val = @version_controller.original_value
  @version_controller = nil
  _orig_overwrite!(orig_val, TransitionTag.new)
  @version_controller = ValueVersionController.new(self)
  invalidate_memo!
end
thin_latest_version!(with_rollback) click to toggle source
# File lib/adlint/cc1/value.rb, line 2558
def thin_latest_version!(with_rollback)
  @version_controller.thin_current_version(with_rollback)
  invalidate_memo!
end
widen_domain!(op, ope_val) click to toggle source
# File lib/adlint/cc1/value.rb, line 2595
def widen_domain!(op, ope_val)
  @version_controller.fork_current_version
  super
  @version_controller.mark_current_versioning_group_as_sticky
  invalidate_memo!
end

Private Instance Methods

compact_descendants!() click to toggle source
# File lib/adlint/cc1/value.rb, line 2623
def compact_descendants!
  @descendants = @version_controller.current_values.reject { |mval|
    mval.equal?(self)
  }.uniq
end