aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/interpreter')
-rw-r--r--mesonbuild/interpreter/interpreterobjects.py23
-rw-r--r--mesonbuild/interpreter/primitives/string.py8
2 files changed, 21 insertions, 10 deletions
diff --git a/mesonbuild/interpreter/interpreterobjects.py b/mesonbuild/interpreter/interpreterobjects.py
index 78c7fb9..fca371c 100644
--- a/mesonbuild/interpreter/interpreterobjects.py
+++ b/mesonbuild/interpreter/interpreterobjects.py
@@ -14,10 +14,10 @@ from .. import mlog
from ..modules import ModuleReturnValue, ModuleObject, ModuleState, ExtensionModule
from ..backend.backends import TestProtocol
from ..interpreterbase import (
- ContainerTypeInfo, KwargInfo,
+ ContainerTypeInfo, KwargInfo, MesonOperator,
InterpreterObject, MesonInterpreterObject, ObjectHolder, MutableInterpreterObject,
FeatureCheckBase, FeatureNewKwargs, FeatureNew, FeatureDeprecated,
- typed_pos_args, typed_kwargs, permittedKwargs,
+ typed_pos_args, typed_kwargs, typed_operator, permittedKwargs,
noArgsFlattening, noPosargs, noKwargs, unholder_return, TYPE_var, TYPE_kwargs, TYPE_nvar, TYPE_nkwargs,
flatten, resolve_second_level_holders, InterpreterException, InvalidArguments, InvalidCode)
from ..interpreter.type_checking import NoneType
@@ -912,6 +912,10 @@ class CustomTargetHolder(ObjectHolder[build.CustomTarget]):
'to_list': self.to_list_method,
})
+ self.operators.update({
+ MesonOperator.INDEX: self.op_index,
+ })
+
def __repr__(self) -> str:
r = '<{} {}: {}>'
h = self.held_object
@@ -931,14 +935,13 @@ class CustomTargetHolder(ObjectHolder[build.CustomTarget]):
result.append(i)
return result
- def __getitem__(self, index: int) -> build.CustomTargetIndex:
- return self.held_object[index]
-
- def __setitem__(self, index: int, value: T.Any) -> None: # lgtm[py/unexpected-raise-in-special-method]
- raise InterpreterException('Cannot set a member of a CustomTarget')
-
- def __delitem__(self, index: int) -> None: # lgtm[py/unexpected-raise-in-special-method]
- raise InterpreterException('Cannot delete a member of a CustomTarget')
+ @noKwargs
+ @typed_operator(MesonOperator.INDEX, int)
+ def op_index(self, other: int) -> build.CustomTargetIndex:
+ try:
+ return self.held_object[other]
+ except IndexError:
+ raise InvalidArguments(f'Index {other} out of bounds of custom target {self.held_object.name} output of size {len(self.held_object)}.')
class RunTargetHolder(ObjectHolder[build.RunTarget]):
pass
diff --git a/mesonbuild/interpreter/primitives/string.py b/mesonbuild/interpreter/primitives/string.py
index 6b7155a..82da6ce 100644
--- a/mesonbuild/interpreter/primitives/string.py
+++ b/mesonbuild/interpreter/primitives/string.py
@@ -64,6 +64,7 @@ class StringHolder(ObjectHolder[str]):
# Use actual methods for functions that require additional checks
self.operators.update({
MesonOperator.DIV: self.op_div,
+ MesonOperator.INDEX: self.op_index,
})
def display_name(self) -> str:
@@ -162,6 +163,13 @@ class StringHolder(ObjectHolder[str]):
def op_div(self, other: str) -> str:
return (PurePath(self.held_object) / other).as_posix()
+ @typed_operator(MesonOperator.INDEX, int)
+ def op_index(self, other: int) -> str:
+ try:
+ return self.held_object[other]
+ except IndexError:
+ raise InvalidArguments(f'Index {other} out of bounds of string of size {len(self.held_object)}.')
+
class MesonVersionString(str):
pass