## vim: ft=makopython class LineMode(_Enum): """ Determine how the preprocessor treats directives and disabled lines in the output. ``delete_lines`` Just delete these lines: this breaks line number correspondance between the original source and the preprocessed one. This corresponds to GNATprep's default mode. ``blank_lines`` Replace these lines with empty lines. This corresponds to GNATprep's ``-b`` option. ``comment_lines`` Preserve these lines and emit a ``--!`` comment marker in front of them. This corresponds to GNATprep's ``-c`` option. """ delete_lines = "delete_lines" blank_lines = "blank_lines" comment_lines = "comment_lines" _name = "LineMode" _c_to_py = [delete_lines, blank_lines, comment_lines] _py_to_c = {name: index for index, name in enumerate(_c_to_py)} @classmethod def create_preprocessor_from_file( cls, filename: str, path: List[str], line_mode: Optional[FileReader.LineMode] ) -> FileReader: ${py_doc('libadalang.create_preprocessor_from_file', 8)} # Create an array of C strings to hold the path directories c_dirs = [ctypes.c_char_p(_unwrap_filename(d)) for d in path] c_path_data = (ctypes.c_char_p * len(c_dirs))() for i, d in enumerate(c_dirs): c_path_data[i] = d # Create the pointer to this array, with the expected type according to # ctypes. c_path_type = ctypes.POINTER(ctypes.c_char_p) c_path = ctypes.cast(ctypes.byref(c_path_data), c_path_type) # Pass the line mode to force, if any if line_mode is not None: lm = ctypes.c_int(FileReader.LineMode._unwrap(line_mode)) lm_ref = ctypes.byref(lm) else: lm_ref = ctypes.POINTER(ctypes.c_int)() # We can now create the file reader itself c_value = _create_preprocessor_from_file( _unwrap_filename(filename), c_path, len(c_dirs), lm_ref ) return cls(c_value)