Browse Source

track_in_interpreter

David Rose 18 years ago
parent
commit
137998a5c7
1 changed files with 16 additions and 13 deletions
  1. 16 13
      dtool/src/interrogate/interfaceMakerPythonNative.cxx

+ 16 - 13
dtool/src/interrogate/interfaceMakerPythonNative.cxx

@@ -2274,13 +2274,16 @@ void InterfaceMakerPythonNative::write_function_instance(ostream &out, Interface
   if (!remap->_void_return && 
   if (!remap->_void_return && 
       remap->_return_type->new_type_is_atomic_string()) {
       remap->_return_type->new_type_is_atomic_string()) {
     // Treat strings as a special case.  We don't want to format the
     // Treat strings as a special case.  We don't want to format the
-    // return expression.
+    // return expression. 
     if (remap->_blocking) {
     if (remap->_blocking) {
       indent(out, extra_indent_level)
       indent(out, extra_indent_level)
         << "PyThreadState *_save;\n";
         << "PyThreadState *_save;\n";
       indent(out, extra_indent_level)
       indent(out, extra_indent_level)
         << "Py_UNBLOCK_THREADS\n";
         << "Py_UNBLOCK_THREADS\n";
     }
     }
+    if (track_interpreter) {
+      indent(out,extra_indent_level) << "in_interpreter = 0;\n";
+    }
     string tt;
     string tt;
     string return_expr = remap->call_function(out, extra_indent_level, false, container, pexprs);
     string return_expr = remap->call_function(out, extra_indent_level, false, container, pexprs);
     CPPType *type = remap->_return_type->get_orig_type();
     CPPType *type = remap->_return_type->get_orig_type();
@@ -2289,14 +2292,13 @@ void InterfaceMakerPythonNative::write_function_instance(ostream &out, Interface
     //    type->output_instance(tt, "return_value", &parser);
     //    type->output_instance(tt, "return_value", &parser);
     out << " = " << return_expr << ";\n";
     out << " = " << return_expr << ";\n";
 
 
+    if (track_interpreter) {
+      indent(out,extra_indent_level) << "in_interpreter = 1;\n";
+    }
     if (remap->_blocking) {
     if (remap->_blocking) {
       indent(out, extra_indent_level)
       indent(out, extra_indent_level)
         << "Py_BLOCK_THREADS\n";
         << "Py_BLOCK_THREADS\n";
     }
     }
-    
-    if (track_interpreter) {
-      indent(out,extra_indent_level) << "in_interpreter = 1;\n";
-    }
     if (!extra_cleanup.empty()) {
     if (!extra_cleanup.empty()) {
       indent(out,extra_indent_level) <<  extra_cleanup << "\n";
       indent(out,extra_indent_level) <<  extra_cleanup << "\n";
     }
     }
@@ -2312,17 +2314,19 @@ void InterfaceMakerPythonNative::write_function_instance(ostream &out, Interface
       indent(out, extra_indent_level)
       indent(out, extra_indent_level)
         << "Py_UNBLOCK_THREADS\n";
         << "Py_UNBLOCK_THREADS\n";
     }
     }
+    if (track_interpreter) {
+      indent(out,extra_indent_level) << "in_interpreter = 0;\n";
+    }
 
 
     string return_expr = remap->call_function(out, extra_indent_level, true, container, pexprs);
     string return_expr = remap->call_function(out, extra_indent_level, true, container, pexprs);
     if (return_expr.empty()) {
     if (return_expr.empty()) {
+      if (track_interpreter) {
+        indent(out,extra_indent_level) << "in_interpreter = 1;\n";
+      }
       if (remap->_blocking) {
       if (remap->_blocking) {
         indent(out, extra_indent_level)
         indent(out, extra_indent_level)
           << "Py_BLOCK_THREADS\n";
           << "Py_BLOCK_THREADS\n";
       }
       }
-
-      if (track_interpreter) {
-        indent(out,extra_indent_level) << "in_interpreter = 1;\n";
-      }
       if (!extra_cleanup.empty()) {
       if (!extra_cleanup.empty()) {
         indent(out,extra_indent_level) << extra_cleanup << "\n";
         indent(out,extra_indent_level) << extra_cleanup << "\n";
       }
       }
@@ -2336,14 +2340,13 @@ void InterfaceMakerPythonNative::write_function_instance(ostream &out, Interface
         type->output_instance(out, "return_value", &parser);
         type->output_instance(out, "return_value", &parser);
         out << " = " << return_expr << ";\n";
         out << " = " << return_expr << ";\n";
       }
       }
+      if (track_interpreter) {
+        indent(out,extra_indent_level) << "in_interpreter = 1;\n";
+      }
       if (remap->_blocking) {
       if (remap->_blocking) {
         indent(out, extra_indent_level)
         indent(out, extra_indent_level)
           << "Py_BLOCK_THREADS\n";
           << "Py_BLOCK_THREADS\n";
       }
       }
-
-      if (track_interpreter) {
-        indent(out,extra_indent_level) << "in_interpreter = 1;\n";
-      }
       if (!extra_cleanup.empty()) {
       if (!extra_cleanup.empty()) {
         indent(out,extra_indent_level) << extra_cleanup << "\n";
         indent(out,extra_indent_level) << extra_cleanup << "\n";
       }
       }