diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2013-07-27 14:18:11 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2013-07-27 14:18:11 +0300 |
commit | 427cfbf569113aeab6b98b96c8e9c3cf2532e8ae (patch) | |
tree | 39352df0eb537d815b425581f673ff55d3462d28 /interpreter.py | |
parent | 208e0122fb2b166c7c29463c31a785935ca30a04 (diff) | |
download | meson-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.py | 34 |
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() |