code: function CodePath(id, upper, onLooped) {
  
  		/**
  		 * The identifier of this code path.
  		 * Rules use it to store additional information of each rule.
  		 * @type {string}
  		 */
  		this.id = id;
  
  		/**
  		 * The code path of the upper function scope.
  		 * @type {CodePath|null}
  		 */
  		this.upper = upper;
  
  		/**
  		 * The code paths of nested function scopes.
  		 * @type {CodePath[]}
  		 */
  		this.childCodePaths = [];
  
  		// Initializes internal state.
  		Object.defineProperty(
  			this,
  			"internal", {
  				value: new CodePathState(new IdGenerator(id + "_"), onLooped)
  			});
  
  		// Adds this into `childCodePaths` of `upper`.
  		if (upper) {
  			upper.childCodePaths.push(this);
  		}
  	}
docs: ------------------------------------------------------------------------------ Public Interface ------------------------------------------------------------------------------ 
  A code path.
  
  @constructor
  @param {string} id - An identifier.
  @param {CodePath|null} upper - The code path of the upper function scope.
  @param {function} onLooped - A callback function to notify looping.