From 65b17751ca7e15d68d6d18ee0c55afadf5fc77fb Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Sun, 5 Nov 2017 11:57:40 +0100 Subject: Optimise iteration over containers declared with a "Dict[...]" type annotation. See #1979. --- Cython/Compiler/Nodes.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'Cython/Compiler/Nodes.py') diff --git a/Cython/Compiler/Nodes.py b/Cython/Compiler/Nodes.py index e0fb4b5bc..7ebaa7d0a 100644 --- a/Cython/Compiler/Nodes.py +++ b/Cython/Compiler/Nodes.py @@ -2159,7 +2159,10 @@ class FuncDefNode(StatNode, BlockNode): error(arg.pos, "Invalid use of 'void'") elif not arg.type.is_complete() and not (arg.type.is_array or arg.type.is_memoryviewslice): error(arg.pos, "Argument type '%s' is incomplete" % arg.type) - return env.declare_arg(arg.name, arg.type, arg.pos) + entry = env.declare_arg(arg.name, arg.type, arg.pos) + if arg.annotation: + entry.annotation = arg.annotation + return entry def generate_arg_type_test(self, arg, code): # Generate type test for one argument. @@ -2775,6 +2778,7 @@ class DefNode(FuncDefNode): name_declarator, type = formal_arg.analyse(scope, nonempty=1) cfunc_args.append(PyrexTypes.CFuncTypeArg(name=name_declarator.name, cname=None, + annotation=formal_arg.annotation, type=py_object_type, pos=formal_arg.pos)) cfunc_type = PyrexTypes.CFuncType(return_type=py_object_type, -- cgit v1.2.1