diff options
author | Stefan Behnel <stefan_ml@behnel.de> | 2015-02-22 11:02:51 +0100 |
---|---|---|
committer | Stefan Behnel <stefan_ml@behnel.de> | 2015-02-22 11:02:51 +0100 |
commit | e62a143062b629dce1dcdff3cfe12d4aa931d495 (patch) | |
tree | 9cda942ce4af950c9a0d92fb2d29cd8cecdf0145 /Cython/Compiler/ModuleNode.py | |
parent | f6f110e115717c794d5273c60631020b19eba700 (diff) | |
download | cython-e62a143062b629dce1dcdff3cfe12d4aa931d495.tar.gz |
enable profiling/tracing for module init code
Diffstat (limited to 'Cython/Compiler/ModuleNode.py')
-rw-r--r-- | Cython/Compiler/ModuleNode.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/Cython/Compiler/ModuleNode.py b/Cython/Compiler/ModuleNode.py index e377dc4a7..b75912b03 100644 --- a/Cython/Compiler/ModuleNode.py +++ b/Cython/Compiler/ModuleNode.py @@ -2049,7 +2049,15 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): code.putln("{") tempdecl_code = code.insertion_point() + profile = code.globalstate.directives['profile'] + linetrace = code.globalstate.directives['linetrace'] + if profile or linetrace: + code.globalstate.use_utility_code(UtilityCode.load_cached("Profile", "Profile.c")) + code.put_declare_refcount_context() + if profile or linetrace: + tempdecl_code.put_trace_declarations(None) + code.putln("#if CYTHON_REFNANNY") code.putln("__Pyx_RefNanny = __Pyx_RefNannyImportAPI(\"refnanny\");") code.putln("if (!__Pyx_RefNanny) {") @@ -2149,8 +2157,16 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): code.putln("/*--- Execution code ---*/") code.mark_pos(None) + if profile or linetrace: + code.put_trace_call(header3, self.pos, nogil=not code.funcstate.gil_owned) + code.funcstate.can_trace = True + self.body.generate_execution_code(code) + if profile or linetrace: + code.funcstate.can_trace = False + code.put_trace_return("Py_None", nogil=not code.funcstate.gil_owned) + code.putln() code.putln("/*--- Wrapped vars code ---*/") self.generate_wrapped_entries_code(env, code) |