Class: AdLint::Cc1::VersionedValue

Inherits:
MultipleValue show all
Defined in:
lib/adlint/cc1/value.rb

Instance Attribute Summary

Attributes inherited from MultipleValue

#ancestor

Instance Method Summary collapse

Methods inherited from MultipleValue

#!, #!=, #%, #&, #*, #+, #+@, #-, #-@, #/, #<, #<<, #<=, #==, #>, #>=, #>>, #^, #_base, #ambiguous?, #array?, #composite?, #contain?, #definite?, #delete_descendants!, #descendants, #dup, #eql?, #exist?, #fork, #hash, #logical_and, #logical_or, #multiple?, #rollback!, #scalar?, #single_value_unified_with, #test_may_be_equal_to, #test_may_be_false, #test_may_be_greater_than, #test_may_be_less_than, #test_may_be_null, #test_may_be_true, #test_may_be_undefined, #test_may_not_be_equal_to, #test_must_be_equal_to, #test_must_be_false, #test_must_be_greater_than, #test_must_be_less_than, #test_must_be_null, #test_must_be_true, #test_must_be_undefined, #test_must_not_be_equal_to, #to_defined_value, #to_enum, #to_single_value, #transition, #undefined?, #|, #~

Methods inherited from Value

#!, #!=, #%, #&, #*, #+, #+@, #-, #-@, #/, #<, #<<, #<=, #==, #>, #>=, #>>, #^, #ambiguous?, #array?, #composite?, #contain?, #definite?, #dup, #eql?, #exist?, #hash, #logical_and, #logical_or, #multiple?, #scalar?, #single_value_unified_with, #test_may_be_equal_to, #test_may_be_false, #test_may_be_greater_than, #test_may_be_less_than, #test_may_be_null, #test_may_be_true, #test_may_be_undefined, #test_may_not_be_equal_to, #test_must_be_equal_to, #test_must_be_false, #test_must_be_greater_than, #test_must_be_less_than, #test_must_be_null, #test_must_be_true, #test_must_be_undefined, #test_must_not_be_equal_to, #to_defined_value, #to_enum, #to_single_value, #undefined?, #|, #~

Methods included from BuggyValueSampler

#unique_sample

Constructor Details

#initialize(orig_val, tag) ⇒ VersionedValue

Returns a new instance of VersionedValue.



2530
2531
2532
2533
2534
2535
2536
# 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

Instance Method Details

#_orig_overwrite!Object



2572
# File 'lib/adlint/cc1/value.rb', line 2572

alias :_orig_overwrite! :overwrite!

#begin_versioningObject



2549
2550
2551
# File 'lib/adlint/cc1/value.rb', line 2549

def begin_versioning
  @version_controller.begin_forking
end

#coerce_to(type) ⇒ Object



2608
2609
2610
# 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_valuesObject



2612
2613
2614
# File 'lib/adlint/cc1/value.rb', line 2612

def effective_values
  @version_controller ? @version_controller.current_values : [self]
end

#end_versioningObject



2553
2554
2555
2556
# File 'lib/adlint/cc1/value.rb', line 2553

def end_versioning
  @version_controller.end_forking
  invalidate_memo!
end

#enter_versioning_groupObject



2538
2539
2540
# File 'lib/adlint/cc1/value.rb', line 2538

def enter_versioning_group
  @version_controller.enter_new_versioning_group
end

#force_overwrite!(val) ⇒ Object



2581
2582
2583
2584
2585
2586
2587
# 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!Object



2618
2619
2620
# File 'lib/adlint/cc1/value.rb', line 2618

def invalidate_memo!
  forget_memo_of__to_single_value
end

#invert_domain!Object



2602
2603
2604
2605
2606
# 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) ⇒ Object



2542
2543
2544
2545
2546
2547
# 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) ⇒ Object



2589
2590
2591
2592
2593
# 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) ⇒ Object



2574
2575
2576
2577
2578
2579
# 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

#rollback_all_versions!Object



2563
2564
2565
2566
2567
2568
2569
2570
# 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) ⇒ Object



2558
2559
2560
2561
# 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) ⇒ Object



2595
2596
2597
2598
2599
2600
# 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