code: function optionalidentifier(fnparam, prop) {
      if (!state.tokens.next.identifier) {
        return;
      }
  
      advance();
  
      var curr = state.tokens.curr;
      var val  = state.tokens.curr.value;
  
      if (!isReserved(curr)) {
        return val;
      }
  
      if (prop) {
        if (state.option.inES5()) {
          return val;
        }
      }
  
      if (fnparam && val === "undefined") {
        return val;
      }
  
      warning("W024", state.tokens.curr, state.tokens.curr.id);
      return val;
    }
docs: fnparam means that this identifier is being defined as a function argument (see identifier()) prop means that this identifier is that of an object property