diff options
| author | Dylan Baker <dylan@pnwbakers.com> | 2025-11-03 11:04:35 -0800 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-11-12 08:14:37 -0800 |
| commit | 176c6d27e3e84f884df42cff6813cc5ca77f91c8 (patch) | |
| tree | 04ce87d3666b01ec8d949e5d4c3d0d0446ee51e2 /mesonbuild/backend/backends.py | |
| parent | 4f1c618392972c935d83eb7939234b3b90479df5 (diff) | |
| download | meson-176c6d27e3e84f884df42cff6813cc5ca77f91c8.tar.gz | |
build: Use a tuple for pch data
This really isn't a list because it's not homogenous data, it's really
`tuple[str, str | None] | None`, but we're using list length to decide
what to do with it, and that makes for strict null issues, as an
accurate annotation would be `list[str | None]`, which would require a
lot of `is not None` checking. By using a tuple we don't need to keep
checking length, which is more expensive than null checking.
To ensure correctness I annotated some things in the VS backend
Diffstat (limited to 'mesonbuild/backend/backends.py')
| -rw-r--r-- | mesonbuild/backend/backends.py | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py index 76bd20932..7fba3f3fb 100644 --- a/mesonbuild/backend/backends.py +++ b/mesonbuild/backend/backends.py @@ -824,10 +824,11 @@ class Backend: # MSVC generate an object file for PCH if extobj.pch and self.target_uses_pch(extobj.target): for lang, pch in extobj.target.pch.items(): - compiler = extobj.target.compilers[lang] - if compiler.get_argument_syntax() == 'msvc': - objname = self.get_msvc_pch_objname(lang, pch) - result.append(os.path.join(targetdir, objname)) + if pch: + compiler = extobj.target.compilers[lang] + if compiler.get_argument_syntax() == 'msvc': + objname = self.get_msvc_pch_objname(lang, pch) + result.append(os.path.join(targetdir, objname)) # extobj could contain only objects and no sources if not sources: @@ -862,13 +863,13 @@ class Backend: args: T.List[str] = [] pchpath = self.get_target_private_dir(target) includeargs = compiler.get_include_args(pchpath, False) - p = target.get_pch(compiler.get_language()) + p = target.pch.get(compiler.get_language()) if p: args += compiler.get_pch_use_args(pchpath, p[0]) return includeargs + args - def get_msvc_pch_objname(self, lang: str, pch: T.List[str]) -> str: - if len(pch) == 1: + def get_msvc_pch_objname(self, lang: str, pch: T.Tuple[str, T.Optional[str]]) -> str: + if pch[1] is None: # Same name as in create_msvc_pch_implementation() below. return f'meson_pch-{lang}.obj' return os.path.splitext(pch[1])[0] + '.obj' |
