re-allow Python values in ExprStatNode and NameNode in nogil sections if they do...
authorStefan Behnel <scoder@users.berlios.de>
Mon, 27 Dec 2010 09:38:00 +0000 (10:38 +0100)
committerStefan Behnel <scoder@users.berlios.de>
Mon, 27 Dec 2010 09:38:00 +0000 (10:38 +0100)
Cython/Compiler/ExprNodes.py
Cython/Compiler/Nodes.py
tests/errors/nogil.pyx

index 38ab6813cde8598edbe6bf4df4fda3c76850b9d6..6a42cfedf8719df281ca5ad44d06fb375206f110 100755 (executable)
@@ -1431,8 +1431,8 @@ class NameNode(AtomicExprNode):
         if self.is_used_as_rvalue:
             entry = self.entry
             if entry.is_builtin:
-                if not Options.cache_builtins: # cached builtins are ok
-                self.gil_error()
+                if not Options.cache_builtins: # cached builtins are ok
+                    self.gil_error()
             elif entry.is_pyglobal:
                 self.gil_error()
 
index e9d889e5a132ce161d3be2dcc285c13762e31afe..92c051acf7fc422f2b0813b302f0f3d427399904 100644 (file)
@@ -3347,7 +3347,7 @@ class ExprStatNode(StatNode):
         self.expr.analyse_expressions(env)
 
     def nogil_check(self, env):
-        if self.expr.type.is_pyobject:
+        if self.expr.type.is_pyobject and self.expr.is_temp:
             self.gil_error()
 
     gil_message = "Discarding owned Python object"
index 387818cac1a8da05dd742f09930e486a0870d7de..623d1ff405b6884997496cbab1be33ba99d00d40 100644 (file)
@@ -82,8 +82,12 @@ def ticket_338():
         for obj from 0 <= obj < 4:
             pass
 
+def bare_pyvar_name(object x):
+    with nogil:
+        x
+
 # For m(), the important thing is that there are errors on all lines in the range 23-69
-# except these: 34, 44, 56, 58, 60, 62-64
+# except these: 29, 34, 44, 56, 58, 60, 62-64
 
 _ERRORS = u"""
 1:5: Function with Python return type cannot be declared nogil
@@ -96,8 +100,6 @@ _ERRORS = u"""
 26:12: Assignment of Python object not allowed without gil
 28:8: Discarding owned Python object not allowed without gil
 28:16: Constructing complex number not allowed without gil
-29:12: Accessing Python global or builtin not allowed without gil
-29:12: Discarding owned Python object not allowed without gil
 30:8: Backquote expression not allowed without gil
 30:8: Discarding owned Python object not allowed without gil
 30:9: Operation not allowed without gil