diff options
| author | Eevee (Alex Munroe) <eevee.git@veekun.com> | 2014-02-11 13:18:39 -0800 |
|---|---|---|
| committer | Eevee (Alex Munroe) <eevee.git@veekun.com> | 2014-02-11 13:18:39 -0800 |
| commit | 836e5f97e84088cd3104cb3a30bf02e8a6c0a9a5 (patch) | |
| tree | 89d1b80846f6feca036096ecbb6b28323fa0eb21 /mako/pyparser.py | |
| parent | a5740079856fcb2244dcebc7fb81da739a4094fd (diff) | |
| download | external_python_mako-836e5f97e84088cd3104cb3a30bf02e8a6c0a9a5.tar.gz external_python_mako-836e5f97e84088cd3104cb3a30bf02e8a6c0a9a5.tar.bz2 external_python_mako-836e5f97e84088cd3104cb3a30bf02e8a6c0a9a5.zip | |
Support Python 3's keyword-only arguments.
Previously, they would parse correctly in Python 3, but any keyword-only
arguments would be quietly lost, and the user would either get
`TypeError: foo() got an unexpected keyword argument...` or the
confusing behavior of having the keyword argument overwritten with
whatever's in the context with the same name.
Diffstat (limited to 'mako/pyparser.py')
| -rw-r--r-- | mako/pyparser.py | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/mako/pyparser.py b/mako/pyparser.py index fc4db9d..2744022 100644 --- a/mako/pyparser.py +++ b/mako/pyparser.py @@ -214,13 +214,25 @@ if _ast: def visit_FunctionDef(self, node): self.listener.funcname = node.name + argnames = [arg_id(arg) for arg in node.args.args] if node.args.vararg: argnames.append(arg_stringname(node.args.vararg)) + + if compat.py2k: + # kw-only args don't exist in Python 2 + kwargnames = [] + else: + kwargnames = [arg_id(arg) for arg in node.args.kwonlyargs] if node.args.kwarg: - argnames.append(arg_stringname(node.args.kwarg)) + kwargnames.append(arg_stringname(node.args.kwarg)) self.listener.argnames = argnames self.listener.defaults = node.args.defaults # ast + self.listener.kwargnames = kwargnames + if compat.py2k: + self.listener.kwdefaults = [] + else: + self.listener.kwdefaults = node.args.kw_defaults self.listener.varargs = node.args.vararg self.listener.kwargs = node.args.kwarg |
