code: function CodePathSegment(id, allPrevSegments, reachable) {
  
  		/**
  		 * The identifier of this code path.
  		 * Rules use it to store additional information of each rule.
  		 * @type {string}
  		 */
  		this.id = id;
  
  		/**
  		 * An array of the next segments.
  		 * @type {CodePathSegment[]}
  		 */
  		this.nextSegments = [];
  
  		/**
  		 * An array of the previous segments.
  		 * @type {CodePathSegment[]}
  		 */
  		this.prevSegments = allPrevSegments.filter(isReachable);
  
  		/**
  		 * An array of the next segments.
  		 * This array includes unreachable segments.
  		 * @type {CodePathSegment[]}
  		 */
  		this.allNextSegments = [];
  
  		/**
  		 * An array of the previous segments.
  		 * This array includes unreachable segments.
  		 * @type {CodePathSegment[]}
  		 */
  		this.allPrevSegments = allPrevSegments;
  
  		/**
  		 * A flag which shows this is reachable.
  		 * @type {boolean}
  		 */
  		this.reachable = reachable;
  
  		// Internal data.
  		Object.defineProperty(this, "internal", {
  			value: {
  				used: false,
  				loopedPrevSegments: []
  			}
  		});
  	}
docs: ------------------------------------------------------------------------------ Public Interface ------------------------------------------------------------------------------ 
  A code path segment.
  
  @constructor
  @param {string} id - An identifier.
  @param {CodePathSegment[]} allPrevSegments - An array of the previous segments.
  This array includes unreachable segments.
  @param {boolean} reachable - A flag which shows this is reachable.