lib.terser.js
function(no_in) {
          handle_regexp();
          var start = S.token;

          if (start.type == "name" && start.value == "yield") {
              if (is_in_generator()) {
                  next();
                  return _yield_expression();
              } else if (S.input.has_directive("use strict")) {
                  token_error(S.token, "Unexpected yield identifier inside strict mode");
              }
          }

          var left = maybe_conditional(no_in);
          var val = S.token.value;

          if (is("operator") && ASSIGNMENT(val)) {
              if (is_assignable(left) || (left = to_destructuring(left)) instanceof AST_Destructuring) {
                  next();
                  return new AST_Assign({
                      start    : start,
                      left     : left,
                      operator : val,
                      right    : maybe_assign(no_in),
                      end      : prev()
                  });
              }
              croak("Invalid assignment");
          }
          return left;
      }
function(no_in) {
          handle_regexp();
          var start = S.token;

          if (start.type == "name" && start.value == "yield") {
              if (is_in_generator()) {
                  next();
                  return _yield_expression();
              } else if (S.input.has_directive("use strict")) {
                  token_error(S.token, "Unexpected yield identifier inside strict mode");
              }
          }

          var left = maybe_conditional(no_in);
          var val = S.token.value;

          if (is("operator") && ASSIGNMENT(val)) {
              if (is_assignable(left) || (left = to_destructuring(left)) instanceof AST_Destructuring) {
                  next();
                  return new AST_Assign({
                      start    : start,
                      left     : left,
                      operator : val,
                      right    : maybe_assign(no_in),
                      end      : prev()
                  });
              }
              croak("Invalid assignment");
          }
          return left;
      }
function ( no_in ) { handle_regexp ( ) ; var start = S . token ; if ( start . type == "name" && start . value == "yield" ) { if ( is_in_generator ( ) ) { next ( ) ; return _yield_expression ( ) ; } else if ( S . input . has_directive ( "use strict" ) ) { token_error ( S . token , "Unexpected yield identifier inside strict mode" ) ; } } var left = maybe_conditional ( no_in ) ; var val = S . token . value ; if ( is ( "operator" ) && ASSIGNMENT ( val ) ) { if ( is_assignable ( left ) || ( left = to_destructuring ( left ) ) instanceof AST_Destructuring ) { next ( ) ; return new AST_Assign ( { start : start , left : left , operator : val , right : maybe_assign ( no_in ) , end : prev ( ) } ) ; } croak ( "Invalid assignment" ) ; } return left ; }
In ES6, AssignmentExpression can also be an ArrowFunction
In ES6 AssignmentExpression can also be an ArrowFunction