aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2018-07-01 23:32:08 +0530
committerNirbheek Chauhan <nirbheek.chauhan@gmail.com>2018-07-02 07:05:08 +0000
commit817dcaa23b92d37339a157ee637ebf361663054b (patch)
tree3cbc7075bfc5013a19ca58570da2141567ed1f9e
parentd0c5fddd7235eb054a47ac319a4a3e9839c7e66c (diff)
downloadmeson-817dcaa23b92d37339a157ee637ebf361663054b.zip
meson-817dcaa23b92d37339a157ee637ebf361663054b.tar.gz
meson-817dcaa23b92d37339a157ee637ebf361663054b.tar.bz2
Remove permittedSnippetKwargs, snippets are not special
All we needed to do was change _get_callee_args() to also support snippets.
-rw-r--r--mesonbuild/interpreterbase.py16
-rw-r--r--mesonbuild/modules/__init__.py13
-rw-r--r--mesonbuild/modules/python.py7
-rw-r--r--mesonbuild/modules/python3.py5
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.')