Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/parser.py @ 31922:0f41f1e3c75c
parser: preserve order of keyword arguments
This helps building dict(key1=value1, ...) in deterministic way.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 09 Apr 2017 11:58:27 +0900 |
parents | 2156934b7917 |
children | 90896b61fe26 |
comparison
equal
deleted
inserted
replaced
31921:2156934b7917 | 31922:0f41f1e3c75c |
---|---|
152 if not varkey and kwstart > len(poskeys) + len(keys): | 152 if not varkey and kwstart > len(poskeys) + len(keys): |
153 raise error.ParseError(_("%(func)s takes at most %(nargs)d positional " | 153 raise error.ParseError(_("%(func)s takes at most %(nargs)d positional " |
154 "arguments") | 154 "arguments") |
155 % {'func': funcname, | 155 % {'func': funcname, |
156 'nargs': len(poskeys) + len(keys)}) | 156 'nargs': len(poskeys) + len(keys)}) |
157 args = {} | 157 args = util.sortdict() |
158 # consume positional arguments | 158 # consume positional arguments |
159 for k, x in zip(poskeys, trees[:kwstart]): | 159 for k, x in zip(poskeys, trees[:kwstart]): |
160 args[k] = x | 160 args[k] = x |
161 if varkey: | 161 if varkey: |
162 args[varkey] = trees[len(args):kwstart] | 162 args[varkey] = trees[len(args):kwstart] |
163 else: | 163 else: |
164 for k, x in zip(keys, trees[len(args):kwstart]): | 164 for k, x in zip(keys, trees[len(args):kwstart]): |
165 args[k] = x | 165 args[k] = x |
166 # remainder should be keyword arguments | 166 # remainder should be keyword arguments |
167 if optkey: | 167 if optkey: |
168 args[optkey] = {} | 168 args[optkey] = util.sortdict() |
169 for x in trees[kwstart:]: | 169 for x in trees[kwstart:]: |
170 if x[0] != keyvaluenode or x[1][0] != keynode: | 170 if x[0] != keyvaluenode or x[1][0] != keynode: |
171 raise error.ParseError(_("%(func)s got an invalid argument") | 171 raise error.ParseError(_("%(func)s got an invalid argument") |
172 % {'func': funcname}) | 172 % {'func': funcname}) |
173 k = x[1][1] | 173 k = x[1][1] |