aboutsummaryrefslogtreecommitdiff
path: root/interpreter.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-07-27 14:18:11 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2013-07-27 14:18:11 +0300
commit427cfbf569113aeab6b98b96c8e9c3cf2532e8ae (patch)
tree39352df0eb537d815b425581f673ff55d3462d28 /interpreter.py
parent208e0122fb2b166c7c29463c31a785935ca30a04 (diff)
downloadmeson-427cfbf569113aeab6b98b96c8e9c3cf2532e8ae.zip
meson-427cfbf569113aeab6b98b96c8e9c3cf2532e8ae.tar.gz
meson-427cfbf569113aeab6b98b96c8e9c3cf2532e8ae.tar.bz2
Interpreter side of tryrun is mostly done.
Diffstat (limited to 'interpreter.py')
-rw-r--r--interpreter.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/interpreter.py b/interpreter.py
index b7d0055..834f7f8 100644
--- a/interpreter.py
+++ b/interpreter.py
@@ -38,6 +38,28 @@ class InterpreterObject():
return self.methods[method_name](args, kwargs)
raise InvalidCode('Unknown method "%s" in object.' % method_name)
+class TryRunResultHolder(InterpreterObject):
+ def __init__(self, res):
+ super().__init__()
+ self.res = res
+ self.methods.update({'returncode' : self.returncode_method,
+ 'compiled' : self.compiled_method,
+ 'stdout' : self.stdout_method,
+ 'stderr' : self.stderr_method,
+ })
+
+ def returncode_method(self, args, kwargs):
+ return self.res.returncode
+
+ def compiled_method(self, args, kwargs):
+ return self.res.compiled
+
+ def stdout_method(self, args, kwargs):
+ return self.res.stdout
+
+ def stderr_method(self, args, kwargs):
+ return self.res.stderr
+
class RunProcess(InterpreterObject):
def __init__(self, command_array, curdir):
@@ -627,8 +649,20 @@ class CompilerHolder(InterpreterObject):
'get_id': self.get_id_method,
'sizeof': self.sizeof_method,
'has_header': self.has_header_method,
+ 'run' : self.run_method,
})
+ def run_method(self, args, kwargs):
+ if len(args) != 1:
+ raise InterpreterException('Run method takes exactly one positional argument.')
+ code = args[0]
+ if isinstance(code, nodes.StringStatement):
+ code = code.get_value()
+ if not isinstance(code, str):
+ raise InterpreterException('First argument is not a string.')
+ result = environment.RunResult(True, 0, 'stdout', 'stderr')
+ return TryRunResultHolder(result)
+
def get_id_method(self, args, kwargs):
return self.compiler.get_id()