More stringlist refactoring.
This commit is contained in:
parent
8e58bb16ad
commit
d1d15cec41
|
@ -38,6 +38,13 @@ class InvalidArguments(InterpreterException):
|
|||
|
||||
# Decorators for method calls.
|
||||
|
||||
def check_stringlist(a, msg='Arguments must be strings.'):
|
||||
if not isinstance(a, list):
|
||||
raise InvalidArguments('Argument not a list.')
|
||||
for s in a:
|
||||
if not isinstance(s, str):
|
||||
raise InvalidArguments(msg)
|
||||
|
||||
def noKwargs(f):
|
||||
@wraps(f)
|
||||
def wrapped(self, node, args, kwargs):
|
||||
|
@ -50,9 +57,7 @@ def stringArgs(f):
|
|||
@wraps(f)
|
||||
def wrapped(self, node, args, kwargs):
|
||||
assert(isinstance(args, list))
|
||||
for s in args:
|
||||
if not isinstance(s, str):
|
||||
raise InvalidArguments('Arguments must be strings.')
|
||||
check_stringlist(args)
|
||||
return f(self, node, args, kwargs)
|
||||
return wrapped
|
||||
|
||||
|
@ -257,11 +262,7 @@ class GeneratorHolder(InterpreterObject):
|
|||
def process_method(self, args, kwargs):
|
||||
if len(kwargs) > 0:
|
||||
raise InvalidArguments('Process does not take keyword arguments.')
|
||||
if not isinstance(args, list):
|
||||
raise InvalidArguments('Argument to "process" must be a string or a list of strings.')
|
||||
for a in args:
|
||||
if not isinstance(a, str):
|
||||
raise InvalidArguments('A non-string object in "process" arguments.')
|
||||
check_stringlist(args)
|
||||
gl = GeneratedListHolder(self)
|
||||
[gl.add_file(os.path.join(self.interpreter.subdir, a)) for a in args]
|
||||
return gl
|
||||
|
@ -346,9 +347,7 @@ class Data(InterpreterObject):
|
|||
if not isinstance(kwsource, list):
|
||||
kwsource = [kwsource]
|
||||
self.sources += kwsource
|
||||
for s in self.sources:
|
||||
if not isinstance(s, str):
|
||||
raise InterpreterException('Install file name must be a string.')
|
||||
check_stringlist(self.sources)
|
||||
self.install_dir = kwargs.get('install_dir', None)
|
||||
if not isinstance(self.install_dir, str):
|
||||
raise InterpreterException('Custom_install_dir must be a string.')
|
||||
|
@ -505,9 +504,8 @@ class CompilerHolder(InterpreterObject):
|
|||
def alignment_method(self, args, kwargs):
|
||||
if len(args) != 1:
|
||||
raise InterpreterException('Alignment method takes exactly one positional argument.')
|
||||
check_stringlist(args)
|
||||
typename = args[0]
|
||||
if not isinstance(typename, str):
|
||||
raise InterpreterException('First argument is not a string.')
|
||||
result = self.compiler.alignment(typename, self.environment)
|
||||
mlog.log('Checking for alignment of "', mlog.bold(typename), '": ', result, sep='')
|
||||
return result
|
||||
|
@ -515,12 +513,11 @@ class CompilerHolder(InterpreterObject):
|
|||
def run_method(self, args, kwargs):
|
||||
if len(args) != 1:
|
||||
raise InterpreterException('Run method takes exactly one positional argument.')
|
||||
check_stringlist(args)
|
||||
code = args[0]
|
||||
testname = kwargs.get('name', '')
|
||||
if not isinstance(testname, str):
|
||||
raise InterpreterException('Testname argument must be a string.')
|
||||
if not isinstance(code, str):
|
||||
raise InterpreterException('First argument is not a string.')
|
||||
result = self.compiler.run(code)
|
||||
if len(testname) > 0:
|
||||
if not result.compiled:
|
||||
|
@ -538,12 +535,9 @@ class CompilerHolder(InterpreterObject):
|
|||
def has_member_method(self, args, kwargs):
|
||||
if len(args) != 2:
|
||||
raise InterpreterException('Has_member takes exactly two arguments.')
|
||||
check_stringlist(args)
|
||||
typename = args[0]
|
||||
if not isinstance(typename, str):
|
||||
raise InterpreterException('Name of type must be a string.')
|
||||
membername = args[1]
|
||||
if not isinstance(membername, str):
|
||||
raise InterpreterException('Name of member must be a string.')
|
||||
prefix = kwargs.get('prefix', '')
|
||||
if not isinstance(prefix, str):
|
||||
raise InterpreterException('Prefix argument of has_function must be a string.')
|
||||
|
@ -559,9 +553,8 @@ class CompilerHolder(InterpreterObject):
|
|||
def has_function_method(self, args, kwargs):
|
||||
if len(args) != 1:
|
||||
raise InterpreterException('Has_function takes exactly one argument.')
|
||||
check_stringlist(args)
|
||||
funcname = args[0]
|
||||
if not isinstance(funcname, str):
|
||||
raise InterpreterException('Argument to has_function must be a string.')
|
||||
prefix = kwargs.get('prefix', '')
|
||||
if not isinstance(prefix, str):
|
||||
raise InterpreterException('Prefix argument of has_function must be a string.')
|
||||
|
@ -576,9 +569,8 @@ class CompilerHolder(InterpreterObject):
|
|||
def sizeof_method(self, args, kwargs):
|
||||
if len(args) != 1:
|
||||
raise InterpreterException('Sizeof takes exactly one argument.')
|
||||
check_stringlist(args)
|
||||
element = args[0]
|
||||
if not isinstance(element, str):
|
||||
raise InterpreterException('Argument to sizeof must be a string.')
|
||||
prefix = kwargs.get('prefix', '')
|
||||
if not isinstance(prefix, str):
|
||||
raise InterpreterException('Prefix argument of sizeof must be a string.')
|
||||
|
@ -589,12 +581,11 @@ class CompilerHolder(InterpreterObject):
|
|||
def compiles_method(self, args, kwargs):
|
||||
if len(args) != 1:
|
||||
raise InterpreterException('compiles method takes exactly one argument.')
|
||||
check_stringlist(args)
|
||||
string = args[0]
|
||||
testname = kwargs.get('name', '')
|
||||
if not isinstance(testname, str):
|
||||
raise InterpreterException('Testname argument must be a string.')
|
||||
if not isinstance(string, str):
|
||||
raise InterpreterException('Argument to compiles() must be a string')
|
||||
result = self.compiler.compiles(string)
|
||||
if len(testname) > 0:
|
||||
if result:
|
||||
|
@ -607,9 +598,8 @@ class CompilerHolder(InterpreterObject):
|
|||
def has_header_method(self, args, kwargs):
|
||||
if len(args) != 1:
|
||||
raise InterpreterException('has_header method takes exactly one argument.')
|
||||
check_stringlist(args)
|
||||
string = args[0]
|
||||
if not isinstance(string, str):
|
||||
raise InterpreterException('Argument to has_header() must be a string')
|
||||
haz = self.compiler.has_header(string)
|
||||
if haz:
|
||||
h = mlog.green('YES')
|
||||
|
@ -666,9 +656,8 @@ class MesonMain(InterpreterObject):
|
|||
def set_install_script_method(self, args, kwargs):
|
||||
if len(args) != 1:
|
||||
raise InterpreterException('Set_install_script takes exactly one argument.')
|
||||
check_stringlist(args)
|
||||
scriptbase = args[0]
|
||||
if not isinstance(scriptbase, str):
|
||||
raise InterpreterException('Set_install_script argument is not a string.')
|
||||
scriptfile = os.path.join(self.interpreter.environment.source_dir,
|
||||
self.interpreter.subdir, scriptbase)
|
||||
if not os.path.isfile(scriptfile):
|
||||
|
@ -888,25 +877,23 @@ class Interpreter():
|
|||
value = self.to_native(args[1])
|
||||
self.set_variable(varname, value)
|
||||
|
||||
@stringArgs
|
||||
@noKwargs
|
||||
def func_import(self, node, args, kwargs):
|
||||
if len(args) != 1:
|
||||
raise InvalidCode('Import takes one argument.')
|
||||
modname = args[0]
|
||||
if not isinstance(modname, str):
|
||||
raise InvalidCode('Argument to import was not a string')
|
||||
if not modname in self.environment.coredata.modules:
|
||||
module = importlib.import_module('modules.' + modname).initialize()
|
||||
self.environment.coredata.modules[modname] = module
|
||||
return ModuleHolder(modname, self.environment.coredata.modules[modname], self)
|
||||
|
||||
@stringArgs
|
||||
@noKwargs
|
||||
def func_file(self, node, args, kwargs):
|
||||
if len(args) != 1:
|
||||
raise InvalidCode('File takes one argument.')
|
||||
fname = args[0]
|
||||
if not isinstance(fname, str):
|
||||
raise InvalidCode('Argument to import was not a string')
|
||||
fobj = File.from_source_file(self.environment.source_dir, self.subdir, fname)
|
||||
return fobj
|
||||
|
||||
|
@ -982,9 +969,7 @@ class Interpreter():
|
|||
cmd = [cmd]
|
||||
else:
|
||||
raise InterpreterException('First argument is of incorrect type.')
|
||||
for i in cargs:
|
||||
if not isinstance(i, str):
|
||||
raise InterpreterException('Run_command arguments must be strings.')
|
||||
check_stringlist(cargs, 'Run_command arguments must be strings.')
|
||||
args = cmd + cargs
|
||||
in_builddir = kwargs.get('in_builddir', False)
|
||||
if not isinstance(in_builddir, bool):
|
||||
|
@ -998,8 +983,7 @@ class Interpreter():
|
|||
raise InterpreterException('Gettext requires one positional argument (package name).')
|
||||
packagename = args[0]
|
||||
languages = kwargs.get('languages', None)
|
||||
if not isinstance(languages, list):
|
||||
raise InterpreterException('Argument languages must be a list of strings.')
|
||||
check_stringlist(languages, 'Argument languages must be a list of strings.')
|
||||
# TODO: check that elements are strings
|
||||
if len(self.build.pot) > 0:
|
||||
raise InterpreterException('More than one gettext definition currently not supported.')
|
||||
|
|
Loading…
Reference in New Issue