summaryrefslogtreecommitdiff
path: root/mesonbuild/backend/backends.py
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2025-11-03 11:04:35 -0800
committerDylan Baker <dylan@pnwbakers.com>2025-11-12 08:14:37 -0800
commit176c6d27e3e84f884df42cff6813cc5ca77f91c8 (patch)
tree04ce87d3666b01ec8d949e5d4c3d0d0446ee51e2 /mesonbuild/backend/backends.py
parent4f1c618392972c935d83eb7939234b3b90479df5 (diff)
downloadmeson-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.py15
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'