@@ -725,7 +725,18 @@ def _MakeParseFn(fn, metadata):
725725 required_kwonly = set (fn_spec .kwonlyargs ) - set (fn_spec .kwonlydefaults )
726726
727727 def _ParseFn (args ):
728- """Parses the list of `args` into (varargs, kwargs), remaining_args."""
728+ """Parses the list of `args` into (varargs, kwargs), consumed_args, remaining_args."""
729+
730+ skip_parse = metadata .get (decorators .SKIP_PARSE , False )
731+
732+ if skip_parse :
733+ kwargs = {}
734+ remaining_kwargs = []
735+ remaining_args = []
736+ varargs = consumed_args = args [:]
737+ capacity = False
738+ return (varargs , kwargs ), consumed_args , remaining_args , capacity
739+
729740 kwargs , remaining_kwargs , remaining_args = _ParseKeywordArgs (args , fn_spec )
730741
731742 # Note: _ParseArgs modifies kwargs.
@@ -757,8 +768,16 @@ def _ParseFn(args):
757768 varargs = parsed_args + varargs
758769 remaining_args += remaining_kwargs
759770
760- consumed_args = args [:len (args ) - len (remaining_args )]
761- return (varargs , kwargs ), consumed_args , remaining_args , capacity
771+ sorted_remaining_args = []
772+ consumed_args = []
773+ for arg in args :
774+ if arg in remaining_args :
775+ sorted_remaining_args .append (arg )
776+ remaining_args .remove (arg )
777+ else :
778+ consumed_args .append (arg )
779+
780+ return (varargs , kwargs ), consumed_args , sorted_remaining_args , capacity
762781
763782 return _ParseFn
764783
@@ -992,4 +1011,4 @@ def _ParseValue(value, index, arg, metadata):
9921011 elif default is not None :
9931012 parse_fn = default
9941013
995- return parse_fn (value )
1014+ return parse_fn (value )
0 commit comments