##// END OF EJS Templates
parser: make buildargsdict() precompute position where keyword args start...
Yuya Nishihara -
r30752:ffd324ea default
parent child Browse files
Show More
@@ -96,17 +96,18 b' def buildargsdict(trees, funcname, keys,'
96 96 Invalid keywords or too many positional arguments are rejected, but
97 97 missing arguments are just omitted.
98 98 """
99 kwstart = next((i for i, x in enumerate(trees) if x[0] == keyvaluenode),
100 len(trees))
99 101 if len(trees) > len(keys):
100 102 raise error.ParseError(_("%(func)s takes at most %(nargs)d arguments")
101 103 % {'func': funcname, 'nargs': len(keys)})
102 104 args = {}
103 105 # consume positional arguments
104 for k, x in zip(keys, trees):
105 if x[0] == keyvaluenode:
106 break
106 for k, x in zip(keys, trees[:kwstart]):
107 107 args[k] = x
108 assert len(args) == kwstart
108 109 # remainder should be keyword arguments
109 for x in trees[len(args):]:
110 for x in trees[kwstart:]:
110 111 if x[0] != keyvaluenode or x[1][0] != keynode:
111 112 raise error.ParseError(_("%(func)s got an invalid argument")
112 113 % {'func': funcname})
General Comments 0
You need to be logged in to leave comments. Login now