docs: function tryParseMethodDefinition(token, key, computed, node) {
          var value, options, methodNode, params,
              previousAllowYield = state.allowYield;
  
          if (token.type === Token.Identifier) {
              // check for `get` and `set`;
  
              if (token.value === 'get' && lookaheadPropertyName()) {
                  computed = match('[');
                  key = parseObjectPropertyKey();
                  methodNode = new Node();
                  expect('(');
                  expect(')');
  
                  state.allowYield = false;
                  value = parsePropertyFunction(methodNode, {
                      params: [],
                      defaults: [],
                      stricted: null,
                      firstRestricted: null,
                      message: null
                  }, false);
                  state.allowYield = previousAllowYield;
  
                  return node.finishProperty('get', key, computed, value, false, false);
              } else if (token.value === 'set' && lookaheadPropertyName()) {
                  computed = match('[');
                  key = parseObjectPropertyKey();
                  methodNode = new Node();
                  expect('(');
  
                  options = {
                      params: [],
                      defaultCount: 0,
                      defaults: [],
                      firstRestricted: null,
                      paramSet: {}
                  };
                  if (match(')')) {
                      tolerateUnexpectedToken(lookahead);
                  } else {
                      state.allowYield = false;
                      parseParam(options);
                      state.allowYield = previousAllowYield;
                      if (options.defaultCount === 0) {
                          options.defaults = [];
                      }
                  }
                  expect(')');
  
                  state.allowYield = false;
                  value = parsePropertyFunction(methodNode, options, false);
                  state.allowYield = previousAllowYield;
  
                  return node.finishProperty('set', key, computed, value, false, false);
              }
          } else if (token.type === Token.Punctuator && token.value === '*' && lookaheadPropertyName()) {
              computed = match('[');
              key = parseObjectPropertyKey();
              methodNode = new Node();
  
              state.allowYield = true;
              params = parseParams();
              state.allowYield = previousAllowYield;
  
              state.allowYield = false;
              value = parsePropertyFunction(methodNode, params, true);
              state.allowYield = previousAllowYield;
  
              return node.finishProperty('init', key, computed, value, true, false);
          }
  
          if (key && match('(')) {
              value = parsePropertyMethodFunction();
              return node.finishProperty('init', key, computed, value, true, false);
          }
  
          // Not a MethodDefinition.
          return null;
      }