summaryrefslogtreecommitdiff
path: root/src/mem/slicc
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/slicc')
-rw-r--r--src/mem/slicc/ast/EnqueueStatementAST.py4
-rw-r--r--src/mem/slicc/symbols/Type.py12
2 files changed, 13 insertions, 3 deletions
diff --git a/src/mem/slicc/ast/EnqueueStatementAST.py b/src/mem/slicc/ast/EnqueueStatementAST.py
index c4f2ac06c..e08e49808 100644
--- a/src/mem/slicc/ast/EnqueueStatementAST.py
+++ b/src/mem/slicc/ast/EnqueueStatementAST.py
@@ -54,8 +54,8 @@ class EnqueueStatementAST(StatementAST):
self.symtab.newSymbol(v)
# Declare message
- code("${{msg_type.ident}} *out_msg = "\
- "new ${{msg_type.ident}}(clockEdge());")
+ code("std::shared_ptr<${{msg_type.ident}}> out_msg = "\
+ "std::make_shared<${{msg_type.ident}}>(clockEdge());")
# The other statements
t = self.statements.generate(code, None)
diff --git a/src/mem/slicc/symbols/Type.py b/src/mem/slicc/symbols/Type.py
index d9bd85c01..2afd9958c 100644
--- a/src/mem/slicc/symbols/Type.py
+++ b/src/mem/slicc/symbols/Type.py
@@ -283,7 +283,16 @@ $klass ${{self.c_ident}}$parent
code('}')
# create a clone member
- code('''
+ if self.isMessage:
+ code('''
+MsgPtr
+clone() const
+{
+ return std::shared_ptr<Message>(new ${{self.c_ident}}(*this));
+}
+''')
+ else:
+ code('''
${{self.c_ident}}*
clone() const
{
@@ -391,6 +400,7 @@ operator<<(std::ostream& out, const ${{self.c_ident}}& obj)
*/
#include <iostream>
+#include <memory>
#include "mem/protocol/${{self.c_ident}}.hh"
#include "mem/ruby/common/Global.hh"