aboutsummaryrefslogtreecommitdiff
path: root/interpreter.py
diff options
context:
space:
mode:
Diffstat (limited to 'interpreter.py')
-rwxr-xr-xinterpreter.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/interpreter.py b/interpreter.py
index ff1de6d..e72a6b3 100755
--- a/interpreter.py
+++ b/interpreter.py
@@ -507,6 +507,7 @@ class Interpreter():
self.subdir = ''
self.generators = []
self.coredata = self.environment.get_coredata()
+ self.visited_subdirs = {}
def build_func_dict(self):
self.funcs = {'project' : self.func_project,
@@ -726,7 +727,12 @@ class Interpreter():
raise InvalidArguments('Line %d: subdir command takes no keyword arguments.' % node.lineno())
self.validate_arguments(args, 1, [str])
prev_subdir = self.subdir
- self.subdir = os.path.join(prev_subdir, args[0])
+ subdir = os.path.join(prev_subdir, args[0])
+ if subdir in self.visited_subdirs:
+ raise InvalidArguments('Line %d: tried to enter subdir "%s", which has already been visited.'\
+ % (node.lineno(), subdir))
+ self.visited_subdirs[subdir] = True
+ self.subdir = subdir
buildfilename = os.path.join(self.subdir, environment.build_filename)
self.build_def_files.append(buildfilename)
code = open(os.path.join(self.environment.get_source_dir(), buildfilename)).read()