private boolean doesItRequireFrame(IRScope scope, boolean bindingHasEscaped) {
    boolean requireFrame = bindingHasEscaped || scope.usesEval();

    for (IRFlags flag : scope.getFlags()) {
      switch (flag) {
        case BINDING_HAS_ESCAPED:
        case CAN_CAPTURE_CALLERS_BINDING:
        case REQUIRES_FRAME:
        case REQUIRES_VISIBILITY:
        case USES_BACKREF_OR_LASTLINE:
        case USES_EVAL:
        case USES_ZSUPER:
          requireFrame = true;
      }
    }

    return requireFrame;
  }