diff --git a/src/mem/protocol/SConscript b/src/mem/protocol/SConscript index 948fd6c1a..cd9920d22 100644 --- a/src/mem/protocol/SConscript +++ b/src/mem/protocol/SConscript @@ -69,9 +69,7 @@ def slicc_emitter(target, source, env): for name in slicc.load(files, verbose=True): print " %s" % name - hh,cc = slicc.files() - target.extend(sorted(hh)) - target.extend(sorted(cc)) + target.extend(sorted(slicc.files())) return target, source def slicc_action(target, source, env): diff --git a/src/mem/slicc/ast/DeclAST.py b/src/mem/slicc/ast/DeclAST.py index 2303725a3..1adb31321 100644 --- a/src/mem/slicc/ast/DeclAST.py +++ b/src/mem/slicc/ast/DeclAST.py @@ -31,8 +31,8 @@ class DeclAST(AST): def __init__(self, slicc, pairs): super(DeclAST, self).__init__(slicc, pairs) - def files(self, hh, cc, parent=None): - pass + def files(self, parent=None): + return set() def findMachines(self): return diff --git a/src/mem/slicc/ast/DeclListAST.py b/src/mem/slicc/ast/DeclListAST.py index 42f98afc7..36c520070 100644 --- a/src/mem/slicc/ast/DeclListAST.py +++ b/src/mem/slicc/ast/DeclListAST.py @@ -38,9 +38,11 @@ class DeclListAST(AST): def __repr__(self): return "[DeclListAST: %s]" % (', '.join(repr(d) for d in self.decls)) - def files(self, hh, cc, parent=None): + def files(self, parent=None): + s = set() for decl in self.decls: - decl.files(hh, cc, parent) + s |= decl.files(parent) + return s def generate(self): for decl in self.decls: diff --git a/src/mem/slicc/ast/EnumDeclAST.py b/src/mem/slicc/ast/EnumDeclAST.py index c16fc8a75..a20f4b749 100644 --- a/src/mem/slicc/ast/EnumDeclAST.py +++ b/src/mem/slicc/ast/EnumDeclAST.py @@ -38,16 +38,16 @@ class EnumDeclAST(DeclAST): def __repr__(self): return "[EnumDecl: %s]" % (self.type_ast) - def files(self, hh, cc, parent=None): + def files(self, parent=None): if "external" in self: - return + return set() if parent: ident = "%s_%s" % (parent, self.type_ast.ident) else: ident = self.type_ast.ident - hh.add("%s.hh" % ident) - cc.add("%s.cc" % ident) + s = set(("%s.hh" % ident, "%s.cc" % ident)) + return s def generate(self): ident = str(self.type_ast) diff --git a/src/mem/slicc/ast/FuncDeclAST.py b/src/mem/slicc/ast/FuncDeclAST.py index 7ff3bf8a7..980804c2a 100644 --- a/src/mem/slicc/ast/FuncDeclAST.py +++ b/src/mem/slicc/ast/FuncDeclAST.py @@ -42,15 +42,15 @@ class FuncDeclAST(DeclAST): def __repr__(self): return "[FuncDecl: %s]" % self.ident - def files(self, hh, cc, parent=None): + def files(self, parent=None): if "external" in self or self.statements is None: - return + return set() if parent: ident = "%s_%s" % (parent, self.ident) else: ident = self.ident - cc.add("%s.cc" % ident) + return set(("%s.cc" % ident,)) def generate(self): types = [] diff --git a/src/mem/slicc/ast/MachineAST.py b/src/mem/slicc/ast/MachineAST.py index 8d48ccbf5..ee75b6d6a 100644 --- a/src/mem/slicc/ast/MachineAST.py +++ b/src/mem/slicc/ast/MachineAST.py @@ -40,16 +40,16 @@ class MachineAST(DeclAST): def __repr__(self): return "[Machine: %r]" % self.ident - def files(self, hh, cc, parent=None): - hh.add('%s_Controller.hh' % self.ident) - hh.add('%s_Profiler.hh' % self.ident) + def files(self, parent=None): + s = set(('%s_Controller.cc' % self.ident, + '%s_Controller.hh' % self.ident, + '%s_Profiler.cc' % self.ident, + '%s_Profiler.hh' % self.ident, + '%s_Transitions.cc' % self.ident, + '%s_Wakeup.cc' % self.ident)) - cc.add('%s_Controller.cc' % self.ident) - cc.add('%s_Profiler.cc' % self.ident) - cc.add('%s_Transitions.cc' % self.ident) - cc.add('%s_Wakeup.cc' % self.ident) - - self.decls.files(hh, cc, self.ident) + s |= self.decls.files(self.ident) + return s def generate(self): # Make a new frame diff --git a/src/mem/slicc/ast/TypeDeclAST.py b/src/mem/slicc/ast/TypeDeclAST.py index d2cc04eff..ecdb5949b 100644 --- a/src/mem/slicc/ast/TypeDeclAST.py +++ b/src/mem/slicc/ast/TypeDeclAST.py @@ -38,16 +38,15 @@ class TypeDeclAST(DeclAST): def __repr__(self): return "[TypeDecl: %r]" % (self.type_ast) - def files(self, hh, cc, parent=None): + def files(self, parent=None): if "external" in self: - return + return set() if parent: ident = "%s_%s" % (parent, self.type_ast.ident) else: ident = self.type_ast.ident - hh.add("%s.hh" % ident) - cc.add("%s.cc" % ident) + return set(("%s.hh" % ident, "%s.cc" % ident)) def generate(self): ident = str(self.type_ast) diff --git a/src/mem/slicc/main.py b/src/mem/slicc/main.py index 0bc2ef37a..f8efcc323 100644 --- a/src/mem/slicc/main.py +++ b/src/mem/slicc/main.py @@ -78,15 +78,7 @@ def main(args=None): output(" %s", filename) if opts.print_files: - hh, cc = slicc.files() - hh = sorted(hh) - cc = sorted(cc) - print 'Headers:' - for i in hh: - print ' %s' % i - - print 'Sources:' - for i in cc: + for i in sorted(slicc.files()): print ' %s' % i else: output("Generator pass 1...") diff --git a/src/mem/slicc/parser.py b/src/mem/slicc/parser.py index 0e5ccc885..6c3f45629 100644 --- a/src/mem/slicc/parser.py +++ b/src/mem/slicc/parser.py @@ -114,19 +114,17 @@ class SLICC(Grammar): self.symtab.writeHTMLFiles(code_path) def files(self): - cc = set([ + f = set([ 'ControllerFactory.cc', - 'MachineType.cc']) - - hh = set([ 'ControllerFactory.hh', + 'MachineType.cc', 'MachineType.hh', 'Types.hh' ]) for decl_list in self.decl_list_vec: - decl_list.files(hh, cc) + f |= decl_list.files() - return hh, cc + return f t_ignore = '\t '