summaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2025-02-28 09:31:00 -0800
committerDylan Baker <dylan@pnwbakers.com>2025-03-03 11:26:23 -0800
commit2ed0d5ed3bda03283fac5780794f43967e691749 (patch)
tree813c5d4c6c9228396be4116c1a5a46bfc7f81100 /mesonbuild
parentd16d5397e57919b50513bab13519fdbba7815c63 (diff)
downloadmeson-2ed0d5ed3bda03283fac5780794f43967e691749.tar.gz
options: use an OptionKey for `get_default_for_b_option`
We have the OptionKey in the one caller that exists already, and this allows us to do a hash lookup instead of a linear walk.
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/interpreter/interpreter.py2
-rw-r--r--mesonbuild/options.py12
2 files changed, 7 insertions, 7 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index b0bda8556..c8c05f0bd 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -1087,7 +1087,7 @@ class Interpreter(InterpreterBase, HoldableObject):
if self.coredata.optstore.is_base_option(optkey):
# Due to backwards compatibility return the default
# option for base options instead of erroring out.
- return self.coredata.optstore.get_default_for_b_option(optname)
+ return self.coredata.optstore.get_default_for_b_option(optkey)
else:
if self.subproject:
raise MesonException(f'Option {optname} does not exist for subproject {self.subproject}.')
diff --git a/mesonbuild/options.py b/mesonbuild/options.py
index 25e2a9f43..ab4fcbe0c 100644
--- a/mesonbuild/options.py
+++ b/mesonbuild/options.py
@@ -1140,13 +1140,13 @@ class OptionStore:
(value_object, value) = self.get_value_object_and_value_for(key)
return (value_object, value)
- def get_default_for_b_option(self, keyname: str) -> ElementaryOptionValues:
- assert keyname.startswith('b_')
+ def get_default_for_b_option(self, key: OptionKey) -> ElementaryOptionValues:
+ assert self.is_base_option(key)
from .compilers.compilers import BASE_OPTIONS
- for bkey, bvalue in BASE_OPTIONS.items():
- if bkey.name == keyname:
- return T.cast('ElementaryOptionValues', bvalue.default)
- raise MesonBugException(f'Requested base option {keyname} which does not exist.')
+ try:
+ return T.cast('ElementaryOptionValues', BASE_OPTIONS[key.evolve(subproject=None)].default)
+ except KeyError:
+ raise MesonBugException(f'Requested base option {key} which does not exist.')
def remove(self, key: OptionKey) -> None:
del self.options[key]