docs: function Variable(name, scope) {
          /**  
           * The variable name, as given in the source code.
           * @member {String} Variable#name 
           */
          this.name = name;
          /**
           * List of defining occurrences of this variable (like in 'var ...'
           * statements or as parameter), as AST nodes.
           * @member {esprima.Identifier[]} Variable#identifiers
           */
          this.identifiers = [];
          /**
           * List of {@link Reference|references} of this variable (excluding parameter entries)
           * in its defining scope and all nested scopes. For defining
           * occurrences only see {@link Variable#defs}.
           * @member {Reference[]} Variable#references
           */
          this.references = [];
  
          /**
           * List of defining occurrences of this variable (like in 'var ...'
           * statements or as parameter), as custom objects.
           * @typedef {Object} DefEntry
           * @property {String} DefEntry.type - the type of the occurrence (e.g.
           *      "Parameter", "Variable", ...)
           * @property {esprima.Identifier} DefEntry.name - the identifier AST node of the occurrence
           * @property {esprima.Node} DefEntry.node - the enclosing node of the
           *      identifier
           * @property {esprima.Node} [DefEntry.parent] - the enclosing statement
           *      node of the identifier
           * @member {DefEntry[]} Variable#defs
           */
          this.defs = [];
  
          this.tainted = false;
          /**
           * Whether this is a stack variable.
           * @member {boolean} Variable#stack
           */
          this.stack = true;
          /** 
           * Reference to the enclosing Scope.
           * @member {Scope} Variable#scope 
           */
          this.scope = scope;
      }