@@ -722,7 +722,18 @@ def _MakeParseFn(fn, metadata):
722722 required_kwonly = set (fn_spec .kwonlyargs ) - set (fn_spec .kwonlydefaults )
723723
724724 def _ParseFn (args ):
725- """Parses the list of `args` into (varargs, kwargs), remaining_args."""
725+ """Parses the list of `args` into (varargs, kwargs), consumed_args, remaining_args."""
726+
727+ skip_parse = metadata .get (decorators .SKIP_PARSE , False )
728+
729+ if skip_parse :
730+ kwargs = {}
731+ remaining_kwargs = []
732+ remaining_args = []
733+ varargs = consumed_args = args [:]
734+ capacity = False
735+ return (varargs , kwargs ), consumed_args , remaining_args , capacity
736+
726737 kwargs , remaining_kwargs , remaining_args = _ParseKeywordArgs (args , fn_spec )
727738
728739 # Note: _ParseArgs modifies kwargs.
@@ -754,8 +765,16 @@ def _ParseFn(args):
754765 varargs = parsed_args + varargs
755766 remaining_args += remaining_kwargs
756767
757- consumed_args = args [:len (args ) - len (remaining_args )]
758- return (varargs , kwargs ), consumed_args , remaining_args , capacity
768+ sorted_remaining_args = []
769+ consumed_args = []
770+ for arg in args :
771+ if arg in remaining_args :
772+ sorted_remaining_args .append (arg )
773+ remaining_args .remove (arg )
774+ else :
775+ consumed_args .append (arg )
776+
777+ return (varargs , kwargs ), consumed_args , sorted_remaining_args , capacity
759778
760779 return _ParseFn
761780
@@ -989,4 +1008,4 @@ def _ParseValue(value, index, arg, metadata):
9891008 elif default is not None :
9901009 parse_fn = default
9911010
992- return parse_fn (value )
1011+ return parse_fn (value )
0 commit comments