docs: def split_recursive(self, decl_string):
          """implementation details"""
          assert self.has_pattern(decl_string)
          to_go = [decl_string]
          while to_go:
              name, args = self.split(to_go.pop())
              for arg in args:
                  if self.has_pattern(arg):
                      to_go.append(arg)
              yield name, args