summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Schulte <trilader@schroedingers-bit.net>2018-09-16 16:00:48 +0200
committerDaniel Schulte <trilader@schroedingers-bit.net>2018-11-26 23:10:53 +0100
commit4c5ec911359a3a91ef3ba1c1336f084649afbe18 (patch)
tree966671e20b2ea033213d5476e5d21dad24d838b1
parent37ffff0aeddaf1f7a92076559484b9a6bce8c455 (diff)
downloadmeson-4c5ec911359a3a91ef3ba1c1336f084649afbe18.tar.gz
Split AstInterpreter into base class and RewriterInterpreter
-rw-r--r--mesonbuild/astinterpreter.py69
-rw-r--r--mesonbuild/rewriter.py2
2 files changed, 44 insertions, 27 deletions
diff --git a/mesonbuild/astinterpreter.py b/mesonbuild/astinterpreter.py
index 32d08450c..686572bd2 100644
--- a/mesonbuild/astinterpreter.py
+++ b/mesonbuild/astinterpreter.py
@@ -46,7 +46,6 @@ REMOVE_SOURCE = 1
class AstInterpreter(interpreterbase.InterpreterBase):
def __init__(self, source_root, subdir):
super().__init__(source_root, subdir)
- self.asts = {}
self.funcs.update({'project': self.func_do_nothing,
'test': self.func_do_nothing,
'benchmark': self.func_do_nothing,
@@ -76,7 +75,49 @@ class AstInterpreter(interpreterbase.InterpreterBase):
'vcs_tag': self.func_do_nothing,
'add_languages': self.func_do_nothing,
'declare_dependency': self.func_do_nothing,
- 'files': self.func_files,
+ 'files': self.func_do_nothing,
+ 'executable': self.func_do_nothing,
+ 'static_library': self.func_do_nothing,
+ 'shared_library': self.func_do_nothing,
+ 'library': self.func_do_nothing,
+ 'build_target': self.func_do_nothing,
+ 'custom_target': self.func_do_nothing,
+ 'run_target': self.func_do_nothing,
+ 'subdir': self.func_do_nothing,
+ 'set_variable': self.func_do_nothing,
+ 'get_variable': self.func_do_nothing,
+ 'is_variable': self.func_do_nothing,
+ })
+
+ def func_do_nothing(self, node, args, kwargs):
+ return True
+
+ def method_call(self, node):
+ return True
+
+ def evaluate_arithmeticstatement(self, cur):
+ return 0
+
+ def evaluate_plusassign(self, node):
+ return 0
+
+ def evaluate_indexing(self, node):
+ return 0
+
+ def unknown_function_called(self, func_name):
+ mlog.warning('Unknown function called: ' + func_name)
+
+ def reduce_arguments(self, args):
+ assert(isinstance(args, mparser.ArgumentNode))
+ if args.incorrect_order():
+ raise InvalidArguments('All keyword arguments must be after positional arguments.')
+ return args.arguments, args.kwargs
+
+class RewriterInterpreter(AstInterpreter):
+ def __init__(self, source_root, subdir):
+ super().__init__(source_root, subdir)
+ self.asts = {}
+ self.funcs.update({'files': self.func_files,
'executable': self.func_executable,
'static_library': self.func_static_lib,
'shared_library': self.func_shared_lib,
@@ -90,12 +131,6 @@ class AstInterpreter(interpreterbase.InterpreterBase):
'is_variable': self.func_is_variable,
})
- def func_do_nothing(self, node, args, kwargs):
- return True
-
- def method_call(self, node):
- return True
-
def func_executable(self, node, args, kwargs):
if args[0] == self.targetname:
if self.operation == ADD_SOURCE:
@@ -147,21 +182,6 @@ class AstInterpreter(interpreterbase.InterpreterBase):
return [args]
return args
- def evaluate_arithmeticstatement(self, cur):
- return 0
-
- def evaluate_plusassign(self, node):
- return 0
-
- def evaluate_indexing(self, node):
- return 0
-
- def reduce_arguments(self, args):
- assert(isinstance(args, mparser.ArgumentNode))
- if args.incorrect_order():
- raise InvalidArguments('All keyword arguments must be after positional arguments.')
- return args.arguments, args.kwargs
-
def transform(self):
self.load_root_meson_file()
self.asts[''] = self.ast
@@ -181,9 +201,6 @@ class AstInterpreter(interpreterbase.InterpreterBase):
self.filename = filename
self.transform()
- def unknown_function_called(self, func_name):
- mlog.warning('Unknown function called: ' + func_name)
-
def add_source_to_target(self, node, args, kwargs):
namespan = node.args.arguments[0].bytespan
buildfilename = os.path.join(self.source_root, self.subdir, environment.build_filename)
diff --git a/mesonbuild/rewriter.py b/mesonbuild/rewriter.py
index 5da8c8903..37ed7efd6 100644
--- a/mesonbuild/rewriter.py
+++ b/mesonbuild/rewriter.py
@@ -41,7 +41,7 @@ def run(options):
if options.target is None or options.filename is None:
sys.exit("Must specify both target and filename.")
print('This tool is highly experimental, use with care.')
- rewriter = mesonbuild.astinterpreter.AstInterpreter(options.sourcedir, '')
+ rewriter = mesonbuild.astinterpreter.RewriterInterpreter(options.sourcedir, '')
try:
if options.commands[0] == 'add':
rewriter.add_source(options.target, options.filename)