aboutsummaryrefslogtreecommitdiff
path: root/interpreter.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2012-12-30 02:06:51 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2012-12-30 02:06:51 +0200
commitfbecb5378dda9851456411e5baeb83176e26a404 (patch)
tree13602369f0b9858bef53a92c7339292643908469 /interpreter.py
parent676dc51ac9324a7cb992eddc47ae94d941501c4a (diff)
downloadmeson-fbecb5378dda9851456411e5baeb83176e26a404.zip
meson-fbecb5378dda9851456411e5baeb83176e26a404.tar.gz
meson-fbecb5378dda9851456411e5baeb83176e26a404.tar.bz2
Can generate external dependency objects.
Diffstat (limited to 'interpreter.py')
-rwxr-xr-xinterpreter.py23
1 files changed, 19 insertions, 4 deletions
diff --git a/interpreter.py b/interpreter.py
index 632de0d..ff5e94f 100755
--- a/interpreter.py
+++ b/interpreter.py
@@ -84,10 +84,10 @@ class Interpreter():
statements = self.ast.get_statements()
while i < len(statements):
cur = statements[i]
- self.evaluate_expression(cur)
+ self.evaluate_statement(cur)
i += 1 # In THE FUTURE jump over blocks and stuff.
- def evaluate_expression(self, cur):
+ def evaluate_statement(self, cur):
if isinstance(cur, nodes.FunctionCall):
return self.function_call(cur)
elif isinstance(cur, nodes.Assignment):
@@ -138,6 +138,12 @@ class Interpreter():
self.executables[name] = exe
print('Creating executable %s with file %s' % (name, sources[0]))
return exe
+
+ def func_find_dep(self, node, args):
+ self.validate_arguments(args, 1, [nodes.StringStatement])
+ name = args[0].get_string()
+ dep = environment.find_external_dependency(name)
+ return dep
def function_call(self, node):
func_name = node.get_function_name()
@@ -150,17 +156,25 @@ class Interpreter():
return self.func_language(node, args)
elif func_name == 'executable':
return self.func_executable(node, args)
+ elif func_name == 'find_dep':
+ return self.func_find_dep(node, args)
else:
raise InvalidCode('Unknown function "%s".' % func_name)
+ def is_assignable(self, value):
+ if isinstance(value, InterpreterObject) or \
+ isinstance(value, environment.PkgConfigDependency):
+ return True
+ return False
+
def assignment(self, node):
var_name = node.var_name
if not isinstance(var_name, nodes.AtomExpression):
raise InvalidArguments('Line %d: Tried to assign value to a non-variable.' % node.lineno())
- value = self.evaluate_expression(node.value)
+ value = self.evaluate_statement(node.value)
if value is None:
raise InvalidCode('Line %d: Can not assign None to variable.' % node.lineno())
- if not isinstance(value, InterpreterObject):
+ if not self.is_assignable(value):
raise InvalidCode('Line %d: Tried to assign an invalid value to variable.' % node.lineno())
self.variables[var_name] = value
return value
@@ -170,6 +184,7 @@ if __name__ == '__main__':
message('I can haz text printed out?')
language('c')
prog = executable('prog', 'prog.c')
+ dep = find_dep('gtk+-3.0')
"""
i = Interpreter(code)
i.run()