function supportsSuper(type, funct) {
    if (type === "call" && funct["(async)"]) {
      return false;
    }

    if (type === "property" && funct["(method)"]) {
      return true;
    }

    if (type === "call" && funct["(statement)"] &&
      funct["(statement)"].id === "class") {
      return true;
    }

    if (funct["(arrow)"]) {
      return supportsSuper(type, funct["(context)"]);
    }

    return false;
  }
Determine if SuperCall or SuperProperty may be used in the current context
(as described by the provided "functor" object).

@param {string} type - one of "property" or "call"
@param {object} funct - a "functor" object describing the current function
                        context

@returns {boolean}