diff options
Diffstat (limited to 'src/mem/slicc')
-rw-r--r-- | src/mem/slicc/ast/EnqueueStatementAST.py | 4 | ||||
-rw-r--r-- | src/mem/slicc/symbols/Type.py | 12 |
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" |