def METHOD_NAME(default=NO_CONTEXTS):
    def decorator(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
    return decorator