slicc: tweak file enumeration for scons
authorSteve Reinhardt <steve.reinhardt@amd.com>
Thu, 5 Nov 2009 19:11:06 +0000 (11:11 -0800)
committerSteve Reinhardt <steve.reinhardt@amd.com>
Thu, 5 Nov 2009 19:11:06 +0000 (11:11 -0800)
Right now .cc and .hh files are handled separately, but then
they're just munged together at the end by scons, so it
doesn't buy us anything.  Might as well munge from the start
since we'll eventually be adding generated Python files
to the list too.

src/mem/protocol/SConscript
src/mem/slicc/ast/DeclAST.py
src/mem/slicc/ast/DeclListAST.py
src/mem/slicc/ast/EnumDeclAST.py
src/mem/slicc/ast/FuncDeclAST.py
src/mem/slicc/ast/MachineAST.py
src/mem/slicc/ast/TypeDeclAST.py
src/mem/slicc/main.py
src/mem/slicc/parser.py

index 948fd6c1ae19fd55dc96299f7da47dc97b1ad409..cd9920d225eb3778242ff325e92a4f10f793dd28 100644 (file)
@@ -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):
index 2303725a3919a8bc79d56e2a60a0daf9d6b4d516..1adb313213b35632c3080001860b7c4abed21cd1 100644 (file)
@@ -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
index 42f98afc744ed852a4e76d52b3889a6734b0436a..36c52007091a65dd4e3dc913678d14996ac07441 100644 (file)
@@ -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:
index c16fc8a750c719afafe24e6acf58ca1c6dc586b9..a20f4b7496f300d99c8345e4cce5e007dbf7d56a 100644 (file)
@@ -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)
index 7ff3bf8a7777eec3620d66d5cc0fdec93adf4e73..980804c2af9797301243d76e67585da59f633262 100644 (file)
@@ -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 = []
index 8d48ccbf5826c18f76ea10abb7c7e1648fe16da2..ee75b6d6afa551ff7554d0362c350eeaf253df46 100644 (file)
@@ -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
index d2cc04eff5f9e8f706e4774058e908f1808748b4..ecdb5949b5256045e86fa9c4904b93eb2a6edf6d 100644 (file)
@@ -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)
index 0bc2ef37a6fedc6fea316222d6373081d003aeac..f8efcc323f7cf691938933cc7046db46c210380c 100644 (file)
@@ -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...")
index 0e5ccc885cce28deb3d640d3c86f2384374d9fc2..6c3f456298175f5b066813943c436fd925e18a84 100644 (file)
@@ -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 '