aboutsummaryrefslogtreecommitdiffstats
path: root/mako/pyparser.py
diff options
context:
space:
mode:
authorEevee (Alex Munroe) <eevee.git@veekun.com>2014-02-11 13:18:39 -0800
committerEevee (Alex Munroe) <eevee.git@veekun.com>2014-02-11 13:18:39 -0800
commit836e5f97e84088cd3104cb3a30bf02e8a6c0a9a5 (patch)
tree89d1b80846f6feca036096ecbb6b28323fa0eb21 /mako/pyparser.py
parenta5740079856fcb2244dcebc7fb81da739a4094fd (diff)
downloadexternal_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.py14
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