whole_func_string: function unroll(node) {
  		for (var i = node.children.length - 1, j, child, maxCount; i >= 0; i--) {
  			child = node.children[i];
  			
  			if (child.isRepeating()) {
  				maxCount = j = child.repeatCount;
  				child.repeatCount = 1;
  				child.updateProperty('counter', 1);
  				child.updateProperty('maxCount', maxCount);
  				while (--j > 0) {
  					child.parent.addChild(child.clone(), i + 1)
  						.updateProperty('counter', j + 1)
  						.updateProperty('maxCount', maxCount);
  				}
  			}
  		}
  		
  		// to keep proper 'counter' property, we need to walk
  		// on children once again
  		_.each(node.children, unroll);
  		
  		return node;
  	}
func_code_string: function unroll(node) {
  		for (var i = node.children.length - 1, j, child, maxCount; i >= 0; i--) {
  			child = node.children[i];
  			
  			if (child.isRepeating()) {
  				maxCount = j = child.repeatCount;
  				child.repeatCount = 1;
  				child.updateProperty('counter', 1);
  				child.updateProperty('maxCount', maxCount);
  				while (--j > 0) {
  					child.parent.addChild(child.clone(), i + 1)
  						.updateProperty('counter', j + 1)
  						.updateProperty('maxCount', maxCount);
  				}
  			}
  		}
  		
  		// to keep proper 'counter' property, we need to walk
  		// on children once again
  		_.each(node.children, unroll);
  		
  		return node;
  	}
func_documentation_string: “Un-rolls“ contents of current node: recursively replaces all repeating
  children with their repeated clones
  @param {AbbreviationNode} node
  @returns {AbbreviationNode}