export default class Binding {
  constructor({ identifier, scope, path, kind }) {
    this.constantViolations = [];
    this.constant           = true;

    this.identifier = identifier;
    this.references = 0;
    this.referenced = false;

    this.scope = scope;
    this.path  = path;
    this.kind  = kind;

    this.clearValue();
  }

  /**
   * Description
   */

  deoptValue() {
    this.clearValue();
    this.deoptValue = true;
  }

  /**
   * Description
   */

  setValue(value) {
    if (this.deoptValue) return;
    this.hasValue = true;
    this.value    = value;
  }

  /**
   * Description
   */

  clearValue() {
    this.deoptValue = false;
    this.hasValue   = false;
    this.value      = null;
  }

  /**
   * Description
   */

  reassign(path) {
    this.constant = false;
    this.constantViolations.push(path);
  }

  /**
   * Description
   */

  reference() {
    this.referenced = true;
    this.references++;
  }

  /**
   * Description
   */

  dereference() {
    this.references--;
    this.referenced = !!this.references;
  }

  /**
   * Description
   */

  isCompatibleWithType(): boolean {
    return false;
  }
}

@@ -405,37 +405,42 @@
 lue();%0A    this.
-d
+hasD
 eopt
+ed
 Value = true;%0A  
@@ -501,29 +501,34 @@
    if (this.
-d
+hasD
 eopt
+ed
 Value) retur
@@ -644,21 +644,26 @@
    this.
-d
+hasD
 eopt
+ed
 Value = 
@@ -689,16 +689,21 @@
 Value   
+     
 = false;
@@ -723,16 +723,21 @@
 ue      
+     
 = null;%0A

fix deoptValue binding boolean - fixes #1687