docs: def set_argument(bound_args, address, value):
      """ Taking a bound_args object, and an |ArgumentAddress| and a value, sets
      the value pointed to by the address to `value`."""
      if address.kind == ArgumentKind.regular:
          bound_args.arguments[address.name] = value
          return
  
      if address.kind == ArgumentKind.variadic:
          if address.name not in bound_args.arguments:
              bound_args.arguments[address.name] = []
  
          n_args = len(bound_args.arguments[address.name])
          if address.key >= n_args:
              bound_args.arguments[address.name].extend(
                  repeat(Empty, address.key - n_args + 1))
  
      if address.kind == ArgumentKind.keyword:
          if address.name not in bound_args.arguments:
              bound_args.arguments[address.name] = {}
  
      bound_args.arguments[address.name][address.key] = value