aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/cython/Cython/Compiler/CodeGeneration.py
blob: 30c464db0014a2a03c00c8a80456c6f0c9ffdbc2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from __future__ import absolute_import 
 
from .Visitor import VisitorTransform 
from .Nodes import StatListNode 
 
 
class ExtractPxdCode(VisitorTransform): 
    """ 
    Finds nodes in a pxd file that should generate code, and 
    returns them in a StatListNode. 
 
    The result is a tuple (StatListNode, ModuleScope), i.e. 
    everything that is needed from the pxd after it is processed. 
 
    A purer approach would be to separately compile the pxd code,
    but the result would have to be slightly more sophisticated 
    than pure strings (functions + wanted interned strings + 
    wanted utility code + wanted cached objects) so for now this 
    approach is taken. 
    """ 
 
    def __call__(self, root): 
        self.funcs = [] 
        self.visitchildren(root) 
        return (StatListNode(root.pos, stats=self.funcs), root.scope) 
 
    def visit_FuncDefNode(self, node): 
        self.funcs.append(node) 
        # Do not visit children, nested funcdefnodes will 
        # also be moved by this action... 
        return node 
 
    def visit_Node(self, node): 
        self.visitchildren(node) 
        return node