@@ -725,7 +725,18 @@ def _MakeParseFn(fn, metadata):
725
725
required_kwonly = set (fn_spec .kwonlyargs ) - set (fn_spec .kwonlydefaults )
726
726
727
727
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
+
729
740
kwargs , remaining_kwargs , remaining_args = _ParseKeywordArgs (args , fn_spec )
730
741
731
742
# Note: _ParseArgs modifies kwargs.
@@ -757,8 +768,16 @@ def _ParseFn(args):
757
768
varargs = parsed_args + varargs
758
769
remaining_args += remaining_kwargs
759
770
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
762
781
763
782
return _ParseFn
764
783
@@ -992,4 +1011,4 @@ def _ParseValue(value, index, arg, metadata):
992
1011
elif default is not None :
993
1012
parse_fn = default
994
1013
995
- return parse_fn (value )
1014
+ return parse_fn (value )
0 commit comments