slicc: support for local variable declarations in action blocks
authorDavid Hashe <david.hashe@amd.com>
Mon, 20 Jul 2015 14:15:18 +0000 (09:15 -0500)
committerDavid Hashe <david.hashe@amd.com>
Mon, 20 Jul 2015 14:15:18 +0000 (09:15 -0500)
src/mem/slicc/ast/ExprStatementAST.py

index acb69f7993f6e7cdb76eee94244307952b283661..6c77522c78f8c2e637767febc62a46ceb2ed6b7f 100644 (file)
@@ -1,5 +1,6 @@
 # Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
 # Copyright (c) 2009 The Hewlett-Packard Development Company
+# Copyright (c) 2013 Advanced Micro Devices, Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -26,6 +27,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 from slicc.ast.StatementAST import StatementAST
+from slicc.ast.LocalVariableAST import LocalVariableAST
 from slicc.symbols import Type
 
 class ExprStatementAST(StatementAST):
@@ -40,8 +42,9 @@ class ExprStatementAST(StatementAST):
         actual_type,rcode = self.expr.inline(True)
         code("$rcode;")
 
-        # The return type must be void
-        if actual_type != self.symtab.find("void", Type):
+        # The return type must be void, except for local var decls
+        if (not isinstance(self.expr, LocalVariableAST) and
+            actual_type != self.symtab.find("void", Type)):
             self.expr.warning("Non-void return ignored, " + \
                 "return type is '%s'", actual_type.ident)