|
|
@ -41,9 +41,8 @@ class InvalidArguments(InterpreterException): |
|
|
|
def check_stringlist(a, msg='Arguments must be strings.'): |
|
|
|
def check_stringlist(a, msg='Arguments must be strings.'): |
|
|
|
if not isinstance(a, list): |
|
|
|
if not isinstance(a, list): |
|
|
|
raise InvalidArguments('Argument not a list.') |
|
|
|
raise InvalidArguments('Argument not a list.') |
|
|
|
for s in a: |
|
|
|
if not all(isinstance(s, str) for s in a): |
|
|
|
if not isinstance(s, str): |
|
|
|
raise InvalidArguments(msg) |
|
|
|
raise InvalidArguments(msg) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def noKwargs(f): |
|
|
|
def noKwargs(f): |
|
|
|
@wraps(f) |
|
|
|
@wraps(f) |
|
|
@ -61,6 +60,15 @@ def stringArgs(f): |
|
|
|
return f(self, node, args, kwargs) |
|
|
|
return f(self, node, args, kwargs) |
|
|
|
return wrapped |
|
|
|
return wrapped |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def stringifyUserArguments(args): |
|
|
|
|
|
|
|
if isinstance(args, list): |
|
|
|
|
|
|
|
return '[%s]' % ', '.join([stringifyUserArguments(x) for x in args]) |
|
|
|
|
|
|
|
elif isinstance(args, int): |
|
|
|
|
|
|
|
return str(args) |
|
|
|
|
|
|
|
elif isinstance(args, str): |
|
|
|
|
|
|
|
return "'%s'" % args |
|
|
|
|
|
|
|
raise InvalidArguments('Function accepts only strings, integers, lists and lists thereof.') |
|
|
|
|
|
|
|
|
|
|
|
class InterpreterObject(): |
|
|
|
class InterpreterObject(): |
|
|
|
def __init__(self): |
|
|
|
def __init__(self): |
|
|
|
self.methods = {} |
|
|
|
self.methods = {} |
|
|
@ -1096,8 +1104,24 @@ class Interpreter(): |
|
|
|
|
|
|
|
|
|
|
|
@noKwargs |
|
|
|
@noKwargs |
|
|
|
def func_message(self, node, args, kwargs): |
|
|
|
def func_message(self, node, args, kwargs): |
|
|
|
self.validate_arguments(args, 1, [str]) |
|
|
|
# reduce arguments again to avoid flattening posargs |
|
|
|
mlog.log(mlog.bold('Message:'), args[0]) |
|
|
|
(posargs, kwargs) = self.reduce_arguments(node.args) |
|
|
|
|
|
|
|
if len(posargs) != 1: |
|
|
|
|
|
|
|
raise InvalidArguments('Expected 1 argument, got %d' % len(posargs)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
arg = posargs[0] |
|
|
|
|
|
|
|
if isinstance(arg, list): |
|
|
|
|
|
|
|
argstr = stringifyUserArguments(arg) |
|
|
|
|
|
|
|
elif isinstance(arg, str): |
|
|
|
|
|
|
|
argstr = arg |
|
|
|
|
|
|
|
elif isinstance(arg, int): |
|
|
|
|
|
|
|
argstr = str(arg) |
|
|
|
|
|
|
|
else: |
|
|
|
|
|
|
|
raise InvalidArguments('Function accepts only strings, integers, lists and lists thereof.') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mlog.log(mlog.bold('Message:'), argstr) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@noKwargs |
|
|
|
@noKwargs |
|
|
|
def func_error(self, node, args, kwargs): |
|
|
|
def func_error(self, node, args, kwargs): |
|
|
|