code: def _check_last_arg_pattern(self, current_arg_pattern, last_arg_pattern):
          
          try:
              if last_arg_pattern.mode == self.single:
                  raise ValueError("insufficient number of arguments")
              elif last_arg_pattern.mode == self.zero_or_more:
                  if last_arg_pattern.wc_name is not None:
                      if last_arg_pattern != current_arg_pattern:
                          # we have to record an empty match
                          return {last_arg_pattern.wc_name: []}
              elif last_arg_pattern.mode == self.one_or_more:
                  if last_arg_pattern != current_arg_pattern:
                      raise ValueError("insufficient number of arguments")
          except AttributeError:
              raise ValueError("insufficient number of arguments")
          return {}
docs: Given a "current" arg pattern (that was used to match the last
          actual argument of an expression), and another ("last") argument
          pattern, raise a ValueError, unless the "last" argument pattern is a
          "zero or more" wildcard. In that case, return a dict that maps the
          wildcard name to an empty list