Remove permittedSnippetKwargs, snippets are not special

All we needed to do was change _get_callee_args() to also support
snippets.
pull/3823/head
Nirbheek Chauhan 7 years ago committed by Nirbheek Chauhan
parent d0c5fddd72
commit 817dcaa23b
  1. 16
      mesonbuild/interpreterbase.py
  2. 13
      mesonbuild/modules/__init__.py
  3. 7
      mesonbuild/modules/python.py
  4. 5
      mesonbuild/modules/python3.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

@ -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):

@ -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):

@ -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.')

Loading…
Cancel
Save