diff options
Diffstat (limited to 'src/mem/slicc')
-rw-r--r-- | src/mem/slicc/ast/FormalParamAST.py | 5 | ||||
-rw-r--r-- | src/mem/slicc/ast/LocalVariableAST.py | 5 | ||||
-rw-r--r-- | src/mem/slicc/ast/MemberExprAST.py | 7 | ||||
-rw-r--r-- | src/mem/slicc/ast/MethodCallExprAST.py | 8 |
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) |