Commit e8e3a368 authored by Robert Bradshaw's avatar Robert Bradshaw

Compiler directive fixes, add c99 complex directive

parent 74a99576
...@@ -64,7 +64,9 @@ option_defaults = { ...@@ -64,7 +64,9 @@ option_defaults = {
'cdivision': True, # Will be False in 0.12 'cdivision': True, # Will be False in 0.12
'cdivision_warnings': False, 'cdivision_warnings': False,
'always_allow_keywords': False, 'always_allow_keywords': False,
'wraparound' : True 'wraparound' : True,
'c99_complex' : False,
'a': 4,
} }
# Override types possibilities above, if needed # Override types possibilities above, if needed
...@@ -95,6 +97,11 @@ def parse_option_value(name, value): ...@@ -95,6 +97,11 @@ def parse_option_value(name, value):
if value == "True": return True if value == "True": return True
elif value == "False": return False elif value == "False": return False
else: raise ValueError("%s directive must be set to True or False" % name) 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: else:
assert False assert False
......
...@@ -2488,7 +2488,7 @@ def p_code(s, level=None): ...@@ -2488,7 +2488,7 @@ def p_code(s, level=None):
repr(s.sy), repr(s.systring))) repr(s.sy), repr(s.systring)))
return body 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): def p_compiler_directive_comments(s):
result = {} result = {}
...@@ -2498,10 +2498,10 @@ def p_compiler_directive_comments(s): ...@@ -2498,10 +2498,10 @@ def p_compiler_directive_comments(s):
name = m.group(1) name = m.group(1)
try: try:
value = Options.parse_option_value(str(name), str(m.group(2).strip())) 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: except ValueError, e:
s.error(e.args[0], fatal=False) s.error(e.args[0], fatal=False)
if value is not None: # can be False!
result[name] = value
s.next() s.next()
return result return result
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment