diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2021-03-03 09:02:49 -0500 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2021-05-28 15:17:10 -0400 |
commit | 723c5227a471aff3a1a5a3bc481984c99bf592aa (patch) | |
tree | 647154c14f8a8de4f58da4b1bd272a5dfaf30efa /mesonbuild/interpreter/interpreterobjects.py | |
parent | 495e76d10a65df9e19e96e5470d64644da0e8099 (diff) | |
download | meson-723c5227a471aff3a1a5a3bc481984c99bf592aa.zip meson-723c5227a471aff3a1a5a3bc481984c99bf592aa.tar.gz meson-723c5227a471aff3a1a5a3bc481984c99bf592aa.tar.bz2 |
modules: Remove snippet methods
The only advantage they have is they have the interpreter in arguments,
but it's already available as self.interpreter. We should discourage
usage of the interpreter API and rely on ModuleState object instead in
the future.
This also lift the restriction that a module method cannot add build
targets, but that was not enforced for snippet methods anyway (and some
modules were doing it) and it's really loose restriction as it should
check for many other things if we wanted to make it consistent.
Diffstat (limited to 'mesonbuild/interpreter/interpreterobjects.py')
-rw-r--r-- | mesonbuild/interpreter/interpreterobjects.py | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/mesonbuild/interpreter/interpreterobjects.py b/mesonbuild/interpreter/interpreterobjects.py index 10e681a..1c64f5b 100644 --- a/mesonbuild/interpreter/interpreterobjects.py +++ b/mesonbuild/interpreter/interpreterobjects.py @@ -10,7 +10,7 @@ from .. import coredata from .. import build from .. import mlog -from ..modules import ModuleReturnValue, ModuleObject, ModuleState +from ..modules import ModuleReturnValue, ModuleObject, ModuleState, ExtensionModule from ..backend.backends import TestProtocol from ..interpreterbase import (InterpreterObject, ObjectHolder, MutableInterpreterObject, FeatureNewKwargs, FeatureNew, FeatureDeprecated, @@ -802,19 +802,12 @@ class ModuleObjectHolder(InterpreterObject, ObjectHolder['ModuleObject']): # so we have to ensure they use the current interpreter and not the one # that first imported that module, otherwise it will use outdated # overrides. - modobj.interpreter = self.interpreter - if method_name in modobj.snippets: - ret = method(self.interpreter, state, args, kwargs) - else: - # This is not 100% reliable but we can't use hash() - # because the Build object contains dicts and lists. - num_targets = len(self.interpreter.build.targets) - ret = method(state, args, kwargs) - if num_targets != len(self.interpreter.build.targets): - raise InterpreterException('Extension module altered internal state illegally.') - if isinstance(ret, ModuleReturnValue): - self.interpreter.process_new_values(ret.new_objects) - ret = ret.return_value + if isinstance(modobj, ExtensionModule): + modobj.interpreter = self.interpreter + ret = method(state, args, kwargs) + if isinstance(ret, ModuleReturnValue): + self.interpreter.process_new_values(ret.new_objects) + ret = ret.return_value return self.interpreter.holderify(ret) _Target = T.TypeVar('_Target', bound=build.Target) |