From c2a5a636545a88f349dbe3e452ffb4494b68e534 Mon Sep 17 00:00:00 2001 From: Anthony Baxter Date: Mon, 2 Aug 2004 06:10:11 +0000 Subject: PEP-0318, @decorator-style. In Guido's words: "@ seems the syntax that everybody can hate equally" Implementation by Mark Russell, from SF #979728. --- Lib/compiler/pycodegen.py | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'Lib/compiler/pycodegen.py') diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py index 4d5f728811..e859ac517e 100644 --- a/Lib/compiler/pycodegen.py +++ b/Lib/compiler/pycodegen.py @@ -366,6 +366,13 @@ class CodeGenerator: self._visitFuncOrLambda(node, isLambda=1) def _visitFuncOrLambda(self, node, isLambda=0): + if not isLambda and node.decorators: + for decorator in reversed(node.decorators.nodes): + self.visit(decorator) + ndecorators = len(node.decorators.nodes) + else: + ndecorators = 0 + gen = self.FunctionGen(node, self.scopes, isLambda, self.class_name, self.get_module()) walk(node.code, gen) @@ -382,6 +389,9 @@ class CodeGenerator: else: self.emit('LOAD_CONST', gen) self.emit('MAKE_FUNCTION', len(node.defaults)) + + for i in range(ndecorators): + self.emit('CALL_FUNCTION', 1) def visitClass(self, node): gen = self.ClassGen(node, self.scopes, -- cgit v1.2.1