defendSyncMethod = (
  getContext,
  behaviorMethod,
  methodGuardPayload,
  label,
) => {
  const { returnGuard } = methodGuardPayload;
  const isRawReturn = isRawGuard(returnGuard);
  const matchConfig = buildMatchConfig(methodGuardPayload);
  const { syncMethod } = {
    // Note purposeful use of `this` and concise method syntax
    syncMethod(...syncArgs) {
      try {
        const context = getContext(this);
        // Only harden args and return value if not dealing with a raw value guard.
        const realArgs = defendSyncArgs(syncArgs, matchConfig, label);
        const result = apply(behaviorMethod, context, realArgs);
        if (!isRawReturn) {
          mustMatch(harden(result), returnGuard, `${label}: result`);
        }
        return result;
      } catch (thrownThing) {
        throw toThrowable(thrownThing);
      }
    },
  };
  return syncMethod;
}
@param {(representative: any) => ClassContext | KitContext} getContext
@param {CallableFunction} behaviorMethod
@param {MethodGuardPayload} methodGuardPayload
@param {string} label
@returns {Method}