def METHOD_NAME(func):
    def wrapper(self, **kwargs):
        detector = self.evaluator.execution_recursion_detector
        allowed = detector.push_execution(self)
        try:
            if allowed:
                result = default
            else:
                result = func(self, **kwargs)
        finally:
            detector.pop_execution()
        return result
    return wrapper