function parseTopLevel(program) {
    lastStart = lastEnd = tokPos;
    if (options.locations) {
      lastEndLoc = new line_loc_t();
    }
    inFunction = strict = false;
    labels = [];
    readToken();

    var node = program || startNode();
    var first = true;
    if (!program) {
      node.body = [];
    }
    while (tokType !== _eof) {
      var stmt = parseStatement();
      node.body.push(stmt);
      if (first && isUseStrict(stmt)) {
        setStrict(true);
      }
      first = false;
    }
    return finishNode(node, "Program");
  }
Parse a program. Initializes the parser, reads any number of
statements, and wraps them in a Program node.  Optionally takes a
`program` argument.  If present, the statements will be appended
to its body instead of creating a new node.

@param {node_t} program
@returns {!node_t}