Commit d0627fcb authored by Vitja Makarov's avatar Vitja Makarov

Add error_on_uninitialized option and disable it for pyregr testsuite

parent 9b4eb5fd
...@@ -9,6 +9,7 @@ cython.declare(PyrexTypes=object, ExprNodes=object, Nodes=object, ...@@ -9,6 +9,7 @@ cython.declare(PyrexTypes=object, ExprNodes=object, Nodes=object,
import Builtin import Builtin
import ExprNodes import ExprNodes
import Nodes import Nodes
import Options
from PyrexTypes import py_object_type, unspecified_type from PyrexTypes import py_object_type, unspecified_type
import PyrexTypes import PyrexTypes
...@@ -574,7 +575,8 @@ def check_definitions(flow, compiler_directives): ...@@ -574,7 +575,8 @@ def check_definitions(flow, compiler_directives):
if node.allow_null or entry.from_closure or entry.is_pyclass_attr: if node.allow_null or entry.from_closure or entry.is_pyclass_attr:
pass # Can be uninitialized here pass # Can be uninitialized here
elif node.cf_is_null: elif node.cf_is_null:
if (entry.type.is_pyobject or entry.type.is_unspecified or if Options.error_on_uninitialized and (
entry.type.is_pyobject or entry.type.is_unspecified or
entry.error_on_uninitialized): entry.error_on_uninitialized):
messages.error( messages.error(
node.pos, node.pos,
......
...@@ -34,6 +34,12 @@ warning_errors = False ...@@ -34,6 +34,12 @@ warning_errors = False
# you should disable this option and also 'cache_builtins'. # you should disable this option and also 'cache_builtins'.
error_on_unknown_names = True error_on_unknown_names = True
# Make uninitialized local variable reference a compile time error.
# Python raises UnboundLocalError at runtime, whereas this option makes
# them a compile time error. Note that this option affects only variables
# of "python object" type.
error_on_uninitialized = True
# This will convert statements of the form "for i in range(...)" # This will convert statements of the form "for i in range(...)"
# to "for i from ..." when i is a cdef'd integer type, and the direction # to "for i from ..." when i is a cdef'd integer type, and the direction
# (i.e. sign of step) can be determined. # (i.e. sign of step) can be determined.
......
...@@ -520,7 +520,9 @@ class CythonCompileTestCase(unittest.TestCase): ...@@ -520,7 +520,9 @@ class CythonCompileTestCase(unittest.TestCase):
def setUp(self): def setUp(self):
from Cython.Compiler import Options from Cython.Compiler import Options
self._saved_options = [ (name, getattr(Options, name)) self._saved_options = [ (name, getattr(Options, name))
for name in ('warning_errors', 'error_on_unknown_names') ] for name in ('warning_errors',
'error_on_unknown_names',
'error_on_uninitialized') ]
self._saved_default_directives = Options.directive_defaults.items() self._saved_default_directives = Options.directive_defaults.items()
Options.warning_errors = self.warning_errors Options.warning_errors = self.warning_errors
...@@ -989,6 +991,7 @@ class CythonPyregrTestCase(CythonRunTestCase): ...@@ -989,6 +991,7 @@ class CythonPyregrTestCase(CythonRunTestCase):
CythonRunTestCase.setUp(self) CythonRunTestCase.setUp(self)
from Cython.Compiler import Options from Cython.Compiler import Options
Options.error_on_unknown_names = False Options.error_on_unknown_names = False
Options.error_on_uninitialized = False
Options.directive_defaults.update(dict( Options.directive_defaults.update(dict(
binding=True, always_allow_keywords=True, binding=True, always_allow_keywords=True,
set_initial_path="SOURCEFILE")) set_initial_path="SOURCEFILE"))
......
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