From 4f72a78684bbfcdc43ceeabb240ceee54706c4b0 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 27 Oct 2006 23:31:49 +0000 Subject: Jiwon Seo's PEP 3102 implementation. See SF#1549670. The compiler package has not yet been updated. --- Lib/compiler/pycodegen.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'Lib/compiler/pycodegen.py') diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py index 83d0481fb65..b08a307b8a7 100644 --- a/Lib/compiler/pycodegen.py +++ b/Lib/compiler/pycodegen.py @@ -378,6 +378,12 @@ class CodeGenerator: walk(node.code, gen) gen.finish() self.set_lineno(node) + for keyword in node.kwonlyargs: + default = keyword.expr + if isinstance(default, ast.EmptyNode): + continue + self.emit('LOAD_CONST', keyword.name) + self.visit(default) for default in node.defaults: self.visit(default) self._makeClosure(gen, len(node.defaults)) @@ -1320,7 +1326,9 @@ class AbstractFunctionCode: name = func.name args, hasTupleArg = generateArgList(func.argnames) + kwonlyargs = generateKwonlyArgList(func.kwonlyargs) self.graph = pyassem.PyFlowGraph(name, func.filename, args, + kwonlyargs=kwonlyargs, optimized=1) self.isLambda = isLambda self.super_init() @@ -1456,6 +1464,13 @@ def generateArgList(arglist): raise ValueError, "unexpect argument type:", elt return args + extra, count +def generateKwonlyArgList(keywordOnlyArgs): + kwonlyargs = {} + for elt in keywordOnlyArgs: + assert isinstance(elt, ast.Keyword) + kwonlyargs[elt.name] = elt.expr + return kwonlyargs + def findOp(node): """Find the op (DELETE, LOAD, STORE) in an AssTuple tree""" v = OpFinder() -- cgit v1.2.3