Compiler directive fixes, add c99 complex directive
authorRobert Bradshaw <robertwb@math.washington.edu>
Thu, 14 May 2009 07:58:11 +0000 (00:58 -0700)
committerRobert Bradshaw <robertwb@math.washington.edu>
Thu, 14 May 2009 07:58:11 +0000 (00:58 -0700)
Cython/Compiler/Options.py
Cython/Compiler/Parsing.py

index faaec3cd19d4720044d7057040ead1c328f3d402..4c1493c02080a35a751629de9d6c77b43deaa8e7 100644 (file)
@@ -64,7 +64,9 @@ option_defaults = {
     'cdivision': True,  # Will be False in 0.12
     'cdivision_warnings': False,
     'always_allow_keywords': False,
-    'wraparound' : True
+    'wraparound' : True,
+    'c99_complex' : False,
+    'a': 4,
 }
 
 # Override types possibilities above, if needed
@@ -95,6 +97,11 @@ def parse_option_value(name, value):
         if value == "True": return True
         elif value == "False": return False
         else: raise ValueError("%s directive must be set to True or False" % name)
+    elif type is int:
+        try:
+            return int(value)
+        except ValueError:
+            raise ValueError("%s directive must be set to an integer" % name)
     else:
         assert False
 
index cf679d07fad4e5b712b956f9e69367dc884855cf..7fcf13abe6aec544fa5b1ccd6334bcafbc13ff28 100644 (file)
@@ -2488,7 +2488,7 @@ def p_code(s, level=None):
             repr(s.sy), repr(s.systring)))
     return body
 
-COMPILER_DIRECTIVE_COMMENT_RE = re.compile(r"^#\s*cython:\s*([a-z_]+)\s*=(.*)$")
+COMPILER_DIRECTIVE_COMMENT_RE = re.compile(r"^#\s*cython:\s*(\w+)\s*=(.*)$")
 
 def p_compiler_directive_comments(s):
     result = {}
@@ -2498,10 +2498,10 @@ def p_compiler_directive_comments(s):
             name = m.group(1)
             try:
                 value = Options.parse_option_value(str(name), str(m.group(2).strip()))
+                if value is not None: # can be False!
+                    result[name] = value
             except ValueError, e:
                 s.error(e.args[0], fatal=False)
-            if value is not None: # can be False!
-                result[name] = value
         s.next()
     return result