summaryrefslogtreecommitdiff
path: root/src/mem/slicc
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/slicc')
-rw-r--r--src/mem/slicc/ast/FormalParamAST.py5
-rw-r--r--src/mem/slicc/ast/LocalVariableAST.py5
-rw-r--r--src/mem/slicc/ast/MemberExprAST.py7
-rw-r--r--src/mem/slicc/ast/MethodCallExprAST.py8
4 files changed, 15 insertions, 10 deletions
diff --git a/src/mem/slicc/ast/FormalParamAST.py b/src/mem/slicc/ast/FormalParamAST.py
index ce73304f1..778b5c1aa 100644
--- a/src/mem/slicc/ast/FormalParamAST.py
+++ b/src/mem/slicc/ast/FormalParamAST.py
@@ -53,9 +53,10 @@ class FormalParamAST(AST):
self.symtab.newSymbol(v)
if self.pointer or str(type) == "TBE" or (
+ # Check whether type is entry by checking the interface since
+ # in protocol files, entries use AbstractCacheEntry as interfaces.
"interface" in type and (
- type["interface"] == "AbstractCacheEntry" or
- type["interface"] == "AbstractEntry")):
+ type["interface"] == "AbstractCacheEntry")):
return type, "%s* %s" % (type.c_ident, param)
else:
return type, "const %s& %s" % (type.c_ident, param)
diff --git a/src/mem/slicc/ast/LocalVariableAST.py b/src/mem/slicc/ast/LocalVariableAST.py
index 5c6bfe80a..c1a5fdbd9 100644
--- a/src/mem/slicc/ast/LocalVariableAST.py
+++ b/src/mem/slicc/ast/LocalVariableAST.py
@@ -61,9 +61,10 @@ class LocalVariableAST(StatementAST):
self.pairs)
self.symtab.newSymbol(v)
if self.pointer or str(type) == "TBE" or (
+ # Check whether type is Entry by checking interface since
+ # entries in protocol files use AbstractCacheEntry as interfaces.
"interface" in type and (
- type["interface"] == "AbstractCacheEntry" or
- type["interface"] == "AbstractEntry")):
+ type["interface"] == "AbstractCacheEntry")):
code += "%s* %s" % (type.c_ident, ident)
else:
code += "%s %s" % (type.c_ident, ident)
diff --git a/src/mem/slicc/ast/MemberExprAST.py b/src/mem/slicc/ast/MemberExprAST.py
index 320146065..50151bd0a 100644
--- a/src/mem/slicc/ast/MemberExprAST.py
+++ b/src/mem/slicc/ast/MemberExprAST.py
@@ -41,10 +41,13 @@ class MemberExprAST(ExprAST):
return_type, gcode = self.expr_ast.inline(True)
fix = code.nofix()
+
+ # Check whether return_type is Entry by checking
+ # interfaces since entries in protocol files use
+ # AbstractCacheEntry as interfaces.
if str(return_type) == "TBE" \
or ("interface" in return_type and
- (return_type["interface"] == "AbstractCacheEntry" or
- return_type["interface"] == "AbstractEntry")):
+ (return_type["interface"] == "AbstractCacheEntry")):
code("(*$gcode).m_${{self.field}}")
else:
code("($gcode).m_${{self.field}}")
diff --git a/src/mem/slicc/ast/MethodCallExprAST.py b/src/mem/slicc/ast/MethodCallExprAST.py
index 104d6f8df..102ab6e4c 100644
--- a/src/mem/slicc/ast/MethodCallExprAST.py
+++ b/src/mem/slicc/ast/MethodCallExprAST.py
@@ -143,18 +143,18 @@ class MemberMethodCallExprAST(MethodCallExprAST):
methodId = implementedMethodId
return_type = obj_type.methods[methodId].return_type
+ # Check object type or interface of entries by checking
+ # AbstractCacheEntry since AbstractCacheEntry is used in
+ # protocol files.
if str(obj_type) == "AbstractCacheEntry" or \
- str(obj_type) == "AbstractEntry" or \
("interface" in obj_type and (
- obj_type["interface"] == "AbstractCacheEntry" or
- obj_type["interface"] == "AbstractEntry")):
+ obj_type["interface"] == "AbstractCacheEntry")):
prefix = "%s((*(%s))." % (prefix, code)
else:
prefix = "%s((%s)." % (prefix, code)
return obj_type, methodId, prefix
-
class ClassMethodCallExprAST(MethodCallExprAST):
def __init__(self, slicc, type_ast, proc_name, expr_ast_vec):
s = super(ClassMethodCallExprAST, self)