function identifier(context, isName) {
    var i = optionalidentifier(context, isName, false);
    if (i) {
      return i;
    }

    error("E030", state.tokens.next, state.tokens.next.value);

    // The token should be consumed after a warning is issued so the parser
    // can continue as though an identifier were found. The semicolon token
    // should not be consumed in this way so that the parser interprets it as
    // a statement delimiter;
    if (state.tokens.next.id !== ";") {
      advance();
    }
  }
Ensure that the current token is an identifier and retrieve its value.

@param {number} context - the parsing context; see `prod-params.js` for
                          more information
@param {boolean} [isName] - `true` if an IdentifierName should be consumed
                            (e.g. object properties)

@returns {string|undefined} - the value of the identifier, if present