From 817dcaa23b92d37339a157ee637ebf361663054b Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Sun, 1 Jul 2018 23:32:08 +0530 Subject: Remove permittedSnippetKwargs, snippets are not special All we needed to do was change _get_callee_args() to also support snippets. --- mesonbuild/interpreterbase.py | 16 ++++++++++++---- mesonbuild/modules/__init__.py | 13 ------------- mesonbuild/modules/python.py | 7 +++---- mesonbuild/modules/python3.py | 5 ++--- 4 files changed, 17 insertions(+), 24 deletions(-) diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py index d5761cd..d2da398 100644 --- a/mesonbuild/interpreterbase.py +++ b/mesonbuild/interpreterbase.py @@ -32,18 +32,26 @@ def check_stringlist(a, msg='Arguments must be strings.'): raise InvalidArguments(msg) def _get_callee_args(wrapped_args): - # Functions have 4 positional args and methods have 3. s = wrapped_args[0] - if len(wrapped_args) == 3: + n = len(wrapped_args) + if n == 3: + # Methods on objects (Holder, MesonMain, etc) have 3 args: self, args, kwargs node_or_state = None args = wrapped_args[1] kwargs = wrapped_args[2] - elif len(wrapped_args) == 4: + elif n == 4: + # Meson functions have 4 args: self, node, args, kwargs + # Module functions have 4 args: self, state, args, kwargs node_or_state = wrapped_args[1] args = wrapped_args[2] kwargs = wrapped_args[3] + elif n == 5: + # Module snippets have 5 args: self, interpreter, state, args, kwargs + node_or_state = wrapped_args[2] + args = wrapped_args[3] + kwargs = wrapped_args[4] else: - raise InvalidArguments('Expecting 3 or 4 args, got {}'.format(len(wrapped_args))) + raise AssertionError('Expecting 3, 4, or 5 args, got: {!r}'.format(wrapped_args)) # Sometimes interpreter methods are called internally with None instead of # empty list/dict diff --git a/mesonbuild/modules/__init__.py b/mesonbuild/modules/__init__.py index e871b87..e461144 100644 --- a/mesonbuild/modules/__init__.py +++ b/mesonbuild/modules/__init__.py @@ -3,19 +3,6 @@ import os from .. import build from .. import mlog -class permittedSnippetKwargs: - - def __init__(self, permitted): - self.permitted = permitted - - def __call__(self, f): - def wrapped(s, interpreter, state, args, kwargs): - for k in kwargs: - if k not in self.permitted: - mlog.warning('Passed invalid keyword argument "%s". This will become a hard error in the future.' % k) - return f(s, interpreter, state, args, kwargs) - return wrapped - class ExtensionModule: def __init__(self, interpreter): diff --git a/mesonbuild/modules/python.py b/mesonbuild/modules/python.py index db9d39d..b9b6a4f 100644 --- a/mesonbuild/modules/python.py +++ b/mesonbuild/modules/python.py @@ -19,7 +19,6 @@ from pathlib import Path from .. import mesonlib from . import ExtensionModule from mesonbuild.modules import ModuleReturnValue -from . import permittedSnippetKwargs from ..interpreterbase import ( noPosargs, noKwargs, permittedKwargs, InterpreterObject, InvalidArguments, @@ -284,7 +283,7 @@ class PythonInstallation(ExternalProgramHolder, InterpreterObject): self.platform = run_command(python, "import sysconfig; print (sysconfig.get_platform())") self.is_pypy = json.loads(run_command(python, IS_PYPY_COMMAND)) - @permittedSnippetKwargs(mod_kwargs) + @permittedKwargs(mod_kwargs) def extension_module(self, interpreter, state, args, kwargs): if 'subdir' in kwargs and 'install_dir' in kwargs: raise InvalidArguments('"subdir" and "install_dir" are mutually exclusive') @@ -312,7 +311,7 @@ class PythonInstallation(ExternalProgramHolder, InterpreterObject): dep = PythonDependency(self, interpreter.environment, kwargs) return interpreter.holderify(dep) - @permittedSnippetKwargs(['pure', 'subdir']) + @permittedKwargs(['pure', 'subdir']) def install_sources(self, interpreter, state, args, kwargs): pure = kwargs.pop('pure', False) if not isinstance(pure, bool): @@ -450,7 +449,7 @@ class PythonModule(ExtensionModule): else: return None - @permittedSnippetKwargs(['required']) + @permittedKwargs(['required']) def find_installation(self, interpreter, state, args, kwargs): required = kwargs.get('required', True) if not isinstance(required, bool): diff --git a/mesonbuild/modules/python3.py b/mesonbuild/modules/python3.py index 79da29a..3cfc689 100644 --- a/mesonbuild/modules/python3.py +++ b/mesonbuild/modules/python3.py @@ -17,8 +17,7 @@ from .. import mesonlib, dependencies from . import ExtensionModule from mesonbuild.modules import ModuleReturnValue -from . import permittedSnippetKwargs -from ..interpreterbase import noKwargs +from ..interpreterbase import noKwargs, permittedKwargs from ..build import known_shmod_kwargs @@ -27,7 +26,7 @@ class Python3Module(ExtensionModule): super().__init__(*args, **kwargs) self.snippets.add('extension_module') - @permittedSnippetKwargs(known_shmod_kwargs) + @permittedKwargs(known_shmod_kwargs) def extension_module(self, interpreter, state, args, kwargs): if 'name_prefix' in kwargs: raise mesonlib.MesonException('Name_prefix is set automatically, specifying it is forbidden.') -- cgit v1.1