code: function isolateCoverGrammar(parser) {
          var oldIsBindingElement = isBindingElement,
              oldIsAssignmentTarget = isAssignmentTarget,
              oldFirstCoverInitializedNameError = firstCoverInitializedNameError,
              result;
          isBindingElement = true;
          isAssignmentTarget = true;
          firstCoverInitializedNameError = null;
          result = parser();
          if (firstCoverInitializedNameError !== null) {
              throwUnexpectedToken(firstCoverInitializedNameError);
          }
          isBindingElement = oldIsBindingElement;
          isAssignmentTarget = oldIsAssignmentTarget;
          firstCoverInitializedNameError = oldFirstCoverInitializedNameError;
          return result;
      }
docs: Cover grammar support.  When an assignment expression position starts with an left parenthesis, the determination of the type of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead) or the first comma. This situation also defers the determination of all the expressions nested in the pair.  There are three productions that can be parsed in a parentheses pair that needs to be determined after the outermost pair is closed. They are:  1. AssignmentExpression 2. BindingElements 3. AssignmentTargets  In order to avoid exponential backtracking, we use two flags to denote if the production can be binding element or assignment target.  The three productions have the relationship:  BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression  with a single exception that CoverInitializedName when used directly in an Expression, generates an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.  isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not effect the current flags. This means the production the parser parses is only used as an expression. Therefore the CoverInitializedName check is conducted.  inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates the flags outside of the parser. This means the production the parser parses is used as a part of a potential pattern. The CoverInitializedName check is deferred.