String literal warning.
authorRobert Bradshaw <robertwb@math.washington.edu>
Tue, 22 Sep 2009 07:59:48 +0000 (00:59 -0700)
committerRobert Bradshaw <robertwb@math.washington.edu>
Tue, 22 Sep 2009 07:59:48 +0000 (00:59 -0700)
Cython/Compiler/Errors.py
Cython/Compiler/ExprNodes.py

index 1e7a44a3a2bd2f1635ed36115090eafcab8e553f..dc51d061375b82ac8b86bc6ef426c97dfafc4edc 100644 (file)
@@ -145,6 +145,20 @@ def warning(position, message, level=0):
         echo_file.write(line)
     return warn
 
+_warn_once_seen = {}
+def warn_once(position, message, level=0):
+    if level < LEVEL or message in _warn_once_seen:
+        return
+    warn = CompileWarning(position, message)
+    line = "warning: %s\n" % warn
+    if listing_file:
+        listing_file.write(line)
+    if echo_file:
+        echo_file.write(line)
+    _warn_once_seen[message] = True
+    return warn
+
+
 # These functions can be used to momentarily suppress errors. 
 
 error_stack = []
index 6d649a43602c3a00f77febf82e94e56ab9b6f353..f14f1817568089f15f695b1893d8e27773d5c29e 100644 (file)
@@ -4,7 +4,7 @@
 
 import operator
 
-from Errors import error, warning, InternalError
+from Errors import error, warning, warn_once, InternalError
 from Errors import hold_errors, release_errors, held_errors, report_error
 from Cython.Utils import UtilityCode
 import StringEncoding
@@ -942,6 +942,7 @@ class StringNode(ConstNode):
         # Arrange for a Python version of the string to be pre-allocated
         # when coercing to a Python type.
         if dst_type.is_pyobject and not self.type.is_pyobject:
+            warn_once(self.pos, "String literals will no longer be Py3 bytes in Cython 0.12.", 1)
             node = self.as_py_string_node(env)
         else:
             node = self