Commit c6be9c54 authored by Stefan Behnel's avatar Stefan Behnel

ticket #635: use relative paths in generated C code position comments

parent fd4f9c44
...@@ -311,7 +311,10 @@ class Context(object): ...@@ -311,7 +311,10 @@ class Context(object):
try: try:
if debug_find_module: if debug_find_module:
print("Context.find_module: Parsing %s" % pxd_pathname) print("Context.find_module: Parsing %s" % pxd_pathname)
source_desc = FileSourceDescriptor(pxd_pathname) rel_path = module_name.replace('.', os.sep) + os.path.splitext(pxd_pathname)[1]
if not pxd_pathname.endswith(rel_path):
rel_path = pxd_pathname # safety measure to prevent printing incorrect paths
source_desc = FileSourceDescriptor(pxd_pathname, rel_path)
err, result = self.process_pxd(source_desc, scope, module_name) err, result = self.process_pxd(source_desc, scope, module_name)
if err: if err:
raise err raise err
...@@ -584,15 +587,23 @@ def run_pipeline(source, options, full_module_name = None): ...@@ -584,15 +587,23 @@ def run_pipeline(source, options, full_module_name = None):
# Set up source object # Set up source object
cwd = os.getcwd() cwd = os.getcwd()
source_desc = FileSourceDescriptor(os.path.join(cwd, source)) abs_path = os.path.abspath(source)
source_ext = os.path.splitext(source)[1]
full_module_name = full_module_name or context.extract_module_name(source, options) full_module_name = full_module_name or context.extract_module_name(source, options)
if options.relative_path_in_code_position_comments:
rel_path = full_module_name.replace('.', os.sep) + source_ext
if not abs_path.endswith(rel_path):
rel_path = source # safety measure to prevent printing incorrect paths
else:
rel_path = abs_path
source_desc = FileSourceDescriptor(abs_path, rel_path)
source = CompilationSource(source_desc, full_module_name, cwd) source = CompilationSource(source_desc, full_module_name, cwd)
# Set up result object # Set up result object
result = create_default_resultobj(source, options) result = create_default_resultobj(source, options)
# Get pipeline # Get pipeline
if source_desc.filename.endswith(".py"): if source_ext.lower() == '.py':
pipeline = context.create_py_pipeline(options, result) pipeline = context.create_py_pipeline(options, result)
else: else:
pipeline = context.create_pyx_pipeline(options, result) pipeline = context.create_pyx_pipeline(options, result)
...@@ -820,6 +831,7 @@ default_options = dict( ...@@ -820,6 +831,7 @@ default_options = dict(
compiler_directives = {}, compiler_directives = {},
evaluate_tree_assertions = False, evaluate_tree_assertions = False,
emit_linenums = False, emit_linenums = False,
relative_path_in_code_position_comments = True,
language_level = 2, language_level = 2,
gdb_debug = False, gdb_debug = False,
) )
...@@ -166,8 +166,9 @@ class FileSourceDescriptor(SourceDescriptor): ...@@ -166,8 +166,9 @@ class FileSourceDescriptor(SourceDescriptor):
optional name argument and will be passed back when asking for optional name argument and will be passed back when asking for
the position()-tuple. the position()-tuple.
""" """
def __init__(self, filename): def __init__(self, filename, path_description=None):
filename = Utils.decode_filename(filename) filename = Utils.decode_filename(filename)
self.path_description = path_description or filename
self.filename = filename self.filename = filename
self.set_file_type_from_name(filename) self.set_file_type_from_name(filename)
self._cmp_name = filename self._cmp_name = filename
...@@ -180,7 +181,7 @@ class FileSourceDescriptor(SourceDescriptor): ...@@ -180,7 +181,7 @@ class FileSourceDescriptor(SourceDescriptor):
require_normalised_newlines=False) require_normalised_newlines=False)
def get_description(self): def get_description(self):
return self.filename return self.path_description
def get_filenametable_entry(self): def get_filenametable_entry(self):
return self.filename return self.filename
......
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