Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion docs/yaml/functions/is_disabler.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
name: is_disabler
returns: bool
since: 0.52.0
description: Returns true if a variable is a disabler and false otherwise.
description: |
Returns true if a variable is a disabler and false otherwise.

Since 1.10.0, the variable can be a list and true is returned if any of its
items is a disabler.

posargs:
var:
Expand Down
13 changes: 11 additions & 2 deletions mesonbuild/interpreter/interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,11 @@
from ..interpreterbase import ContainerTypeInfo, InterpreterBase, KwargInfo, typed_kwargs, typed_pos_args
from ..interpreterbase import noPosargs, noKwargs, permittedKwargs, noArgsFlattening, noSecondLevelHolderResolving, unholder_return
from ..interpreterbase import InterpreterException, InvalidArguments, InvalidCode, SubdirDoneRequest
from ..interpreterbase import Disabler, disablerIfNotFound
from ..interpreterbase import Disabler, disablerIfNotFound, is_disabled
from ..interpreterbase import FeatureNew, FeatureDeprecated, FeatureBroken, FeatureNewKwargs
from ..interpreterbase import ObjectHolder, ContextManagerObject
from ..interpreterbase import stringifyUserArguments

from ..modules import ExtensionModule, ModuleObject, MutableModuleObject, NewExtensionModule, NotFoundExtensionModule
from ..optinterpreter import optname_regex

Expand Down Expand Up @@ -3589,8 +3590,16 @@ def machine_from_native_kwarg(kwargs: T.Dict[str, T.Any]) -> MachineChoice:
@FeatureNew('is_disabler', '0.52.0')
@typed_pos_args('is_disabler', object)
@noKwargs
@noArgsFlattening
def func_is_disabler(self, node: mparser.BaseNode, args: T.Tuple[object], kwargs: 'TYPE_kwargs') -> bool:
return isinstance(args[0], Disabler)
if isinstance(args[0], Disabler):
return True
if isinstance(args[0], dict):
return is_disabled([], args[0])
if isinstance(args[0], list):
FeatureNew.single_use('is_disabler with list argument', '1.10.0', self.subproject, location=node)
return is_disabled(args[0], {})
return False

@noKwargs
@FeatureNew('range', '0.58.0')
Expand Down
9 changes: 9 additions & 0 deletions test cases/common/158 disabler/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -151,3 +151,12 @@ foreach k, i : {'a': true, 'b': disabler(), 'c': true}
endforeach
assert(loops == 3, 'Disabler in foreach dict')
assert(disablers == 1, 'Disabler in foreach dict')

assert(not is_disabler([1, 2, 3]))
assert(is_disabler([1, disabler(), 3]))
assert(is_disabler([1, [disabler()], 3]))
assert(is_disabler({'a': 1, 'b': disabler(), 'c': 3}))
assert(is_disabler({'a': 1, 'b': [disabler()], 'c': 3}))
# Disctionaries are not looked into recursively, unlike lists.
# This reflects the behavior kwargs handling.
assert(not is_disabler({'a': 1, 'b': {'x': disabler()}, 'c': 3}))
Loading