function() {
    let location = null;
    const args = Array.prototype.slice.call(arguments);
    args.push(docs);
    if (typeof result.preBuild === "function") {
      result.preBuild(arguments);
    }
    if (self.withPositions || self.withSource) {
      let src = null;
      if (self.withSource) {
        src = parser.lexer._input.substring(start.offset, parser.prev[2]);
      }
      if (self.withPositions) {
        location = new Location(
          src,
          start,
          new Position(parser.prev[0], parser.prev[1], parser.prev[2])
        );
      } else {
        location = new Location(src, null, null);
      }
      // last argument is allways the location
      args.push(location);
    }
    // handle lazy kind definitions
    if (!kind) {
      kind = args.shift();
    }
    // build the object
    const node = self[kind];
    if (typeof node !== "function") {
      throw new Error('Undefined node "' + kind + '"');
    }
    const astNode = Object.create(node.prototype);
    node.apply(astNode, args);
    result.instance = astNode;
    if (result.trailingComments) {
      // buffer of trailingComments
      astNode.trailingComments = result.trailingComments;
    }
    if (typeof result.postBuild === "function") {
      result.postBuild(astNode);
    }
    if (parser.debug) {
      delete AST.stack[result.stackUid];
    }
    return self.resolvePrecedence(astNode, parser);
  }
function() {
    let location = null;
    const args = Array.prototype.slice.call(arguments);
    args.push(docs);
    if (typeof result.preBuild === "function") {
      result.preBuild(arguments);
    }
    if (self.withPositions || self.withSource) {
      let src = null;
      if (self.withSource) {
        src = parser.lexer._input.substring(start.offset, parser.prev[2]);
      }
      if (self.withPositions) {
        location = new Location(
          src,
          start,
          new Position(parser.prev[0], parser.prev[1], parser.prev[2])
        );
      } else {
        location = new Location(src, null, null);
      }
      
      args.push(location);
    }
    
    if (!kind) {
      kind = args.shift();
    }
    
    const node = self[kind];
    if (typeof node !== "function") {
      throw new Error('Undefined node "' + kind + '"');
    }
    const astNode = Object.create(node.prototype);
    node.apply(astNode, args);
    result.instance = astNode;
    if (result.trailingComments) {
      
      astNode.trailingComments = result.trailingComments;
    }
    if (typeof result.postBuild === "function") {
      result.postBuild(astNode);
    }
    if (parser.debug) {
      delete AST.stack[result.stackUid];
    }
    return self.resolvePrecedence(astNode, parser);
  }
function ( ) { let location = null ; const args = Array . prototype . slice . call ( arguments ) ; args . push ( docs ) ; if ( typeof result . preBuild === "function" ) { result . preBuild ( arguments ) ; } if ( self . withPositions || self . withSource ) { let src = null ; if ( self . withSource ) { src = parser . lexer . _input . substring ( start . offset , parser . prev [ 2 ] ) ; } if ( self . withPositions ) { location = new Location ( src , start , new Position ( parser . prev [ 0 ] , parser . prev [ 1 ] , parser . prev [ 2 ] ) ) ; } else { location = new Location ( src , null , null ) ; } // last argument is allways the location args . push ( location ) ; } // handle lazy kind definitions if ( ! kind ) { kind = args . shift ( ) ; } // build the object const node = self [ kind ] ; if ( typeof node !== "function" ) { throw new Error ( 'Undefined node "' + kind + '"' ) ; } const astNode = Object . create ( node . prototype ) ; node . apply ( astNode , args ) ; result . instance = astNode ; if ( result . trailingComments ) { // buffer of trailingComments astNode . trailingComments = result . trailingComments ; } if ( typeof result . postBuild === "function" ) { result . postBuild ( astNode ) ; } if ( parser . debug ) { delete AST . stack [ result . stackUid ] ; } return self . resolvePrecedence ( astNode , parser ) ; }
returns the node
returns the node