diff options
Diffstat (limited to 'mako/pyparser.py')
-rw-r--r-- | mako/pyparser.py | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/mako/pyparser.py b/mako/pyparser.py index 75301cc..aa2d882 100644 --- a/mako/pyparser.py +++ b/mako/pyparser.py @@ -1,5 +1,5 @@ # mako/pyparser.py -# Copyright (C) 2006-2013 the Mako authors and contributors <see AUTHORS file> +# Copyright (C) 2006-2014 the Mako authors and contributors <see AUTHORS file> # # This module is part of Mako and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php @@ -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 @@ -367,8 +379,13 @@ else: def visitFunction(self, node, *args): self.listener.funcname = node.name - self.listener.argnames = node.argnames + self.listener.argnames = list(node.argnames) + if node.kwargs: + self.listener.kwargnames = [self.listener.argnames.pop()] + else: + self.listener.kwargnames = [] self.listener.defaults = node.defaults + self.listener.kwdefaults = [] self.listener.varargs = node.varargs self.listener.kwargs = node.kwargs |