MCPcopy Index your code
hub / github.com/python/cpython / get_preprocessor

Function get_preprocessor

Tools/c-analyzer/c_parser/preprocessor/__init__.py:87–135  ·  view source on GitHub ↗
(*,
                     file_macros=None,
                     file_includes=None,
                     file_incldirs=None,
                     file_same=None,
                     ignore_exc=False,
                     log_err=None,
                     )

Source from the content-addressed store, hash-verified

85
86
87def get_preprocessor(*,
88 file_macros=None,
89 file_includes=None,
90 file_incldirs=None,
91 file_same=None,
92 ignore_exc=False,
93 log_err=None,
94 ):
95 _preprocess = preprocess
96 if file_macros:
97 file_macros = tuple(_parse_macros(file_macros))
98 if file_includes:
99 file_includes = tuple(_parse_includes(file_includes))
100 if file_incldirs:
101 file_incldirs = tuple(_parse_incldirs(file_incldirs))
102 if file_same:
103 file_same = dict(file_same or ())
104 if not callable(ignore_exc):
105 ignore_exc = (lambda exc, _ig=ignore_exc: _ig)
106
107 def get_file_preprocessor(filename):
108 filename = filename.strip()
109 if file_macros:
110 macros = list(_resolve_file_values(filename, file_macros))
111 if file_includes:
112 # There's a small chance we could need to filter out any
113 # includes that import "filename". It isn't clear that it's
114 # a problem any longer. If we do end up filtering then
115 # it may make sense to use c_common.fsutil.match_path_tail().
116 includes = [i for i, in _resolve_file_values(filename, file_includes)]
117 if file_incldirs:
118 incldirs = [v for v, in _resolve_file_values(filename, file_incldirs)]
119 if file_same:
120 samefiles = _resolve_samefiles(filename, file_same)
121
122 def preprocess(**kwargs):
123 if file_macros and 'macros' not in kwargs:
124 kwargs['macros'] = macros
125 if file_includes and 'includes' not in kwargs:
126 kwargs['includes'] = includes
127 if file_incldirs and 'incldirs' not in kwargs:
128 kwargs['incldirs'] = incldirs
129 if file_same and 'samefiles' not in kwargs:
130 kwargs['samefiles'] = samefiles
131 kwargs.setdefault('filename', filename)
132 with handling_errors(ignore_exc, log_err=log_err):
133 return _preprocess(filename, **kwargs)
134 return preprocess
135 return get_file_preprocessor
136
137
138def _resolve_file_values(filename, file_values):

Callers 2

process_argsFunction · 0.70
_iter_preprocessedFunction · 0.70

Calls 3

_parse_macrosFunction · 0.85
_parse_includesFunction · 0.85
_parse_incldirsFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…